我在HDFS中有两个不同数据格式的文件。如果我需要减少两个数据文件,那么作业如何设置?
e.g。想象常见的单词计数问题,在一个文件中,您有空间作为世界分隔符,而在另一个文件中有下划线。在我的方法中,我需要不同的映射器用于各种文件格式,而不是提供给普通的reducer。
怎么做? 还是有比我更好的解决方案?
答案 0 :(得分:4)
查看解决此问题的MultipleInputs
课程。它非常整洁 - 你传入了InputFormat
和Mapper
类。
如果您要在Google上查找代码示例,请搜索“Reduce-side join”,这是此方法通常使用的位置。
另一方面,有时我发现使用黑客更容易。例如,如果您有一组空间分隔的文件和另一个以下划线分隔的文件,请使用相同的映射器和TextInputFormat
加载两个文件,并在两个可能的分隔符上进行标记。计算两个结果集中的标记数。在单词计数示例中,选择具有更多标记的那个。
如果两个文件都是相同的分隔符但标准列的数量不同,这也适用。您可以使用逗号进行标记,然后查看有多少令牌。如果说5个令牌是来自数据集A,如果它是7个令牌则来自数据集B.