3

我在 HDFS 中有两个具有不同数据格式的文件。如果我需要减少两个数据文件,作业设置会是什么样子?

例如,想象一下常见的字数问题,在一个文件中你有空格作为世界分隔符,而在另一个文件中是下划线。在我的方法中,我需要不同的映射器来处理各种文件格式,而不是输入一个通用的减速器。

怎么做?还是有比我更好的解决方案?

4

1 回答 1

4

查看MultipleInputs解决这个确切问题的课程。它非常简洁——您可以通过课程InputFormat和可选Mapper课程。

如果您在 google 上寻找代码示例,请搜索“Reduce-side join”,这是通常使用此方法的地方。


另一方面,有时我发现只使用 hack 更容易。例如,如果您有一组文件是空格分隔的,另一组文件是下划线分隔的,则使用相同的映射器加载这两个文件,TextInputFormat并对两个可能的分隔符进行标记。计算两个结果集中的标记数。在字数统计示例中,选择具有更多标记的那个。

如果两个文件是相同的分隔符但具有不同数量的标准列,这也适用。您可以用逗号标记然后查看有多少标记。如果是 5 个令牌,则来自数据集 A,如果是 7 个令牌,则来自数据集 B。

于 2012-04-18T17:22:01.993 回答