我在 HDFS 中有两个具有不同数据格式的文件。如果我需要减少两个数据文件,作业设置会是什么样子?
例如,想象一下常见的字数问题,在一个文件中你有空格作为世界分隔符,而在另一个文件中是下划线。在我的方法中,我需要不同的映射器来处理各种文件格式,而不是输入一个通用的减速器。
怎么做?还是有比我更好的解决方案?
查看MultipleInputs
解决这个确切问题的课程。它非常简洁——您可以通过课程InputFormat
和可选Mapper
课程。
如果您在 google 上寻找代码示例,请搜索“Reduce-side join”,这是通常使用此方法的地方。
另一方面,有时我发现只使用 hack 更容易。例如,如果您有一组文件是空格分隔的,另一组文件是下划线分隔的,则使用相同的映射器加载这两个文件,TextInputFormat
并对两个可能的分隔符进行标记。计算两个结果集中的标记数。在字数统计示例中,选择具有更多标记的那个。
如果两个文件是相同的分隔符但具有不同数量的标准列,这也适用。您可以用逗号标记然后查看有多少标记。如果是 5 个令牌,则来自数据集 A,如果是 7 个令牌,则来自数据集 B。