我在 HDFS 中有两个数据格式不同的文件。如果我需要减少两个数据文件,那么作业设置会是什么样子?
例如想象一下常见的字数统计问题,在一个文件中使用空格作为世界分隔符,在另一个文件中使用下划线。在我的方法中,我需要针对各种文件格式使用不同的映射器,然后将其输入到通用的减速器中。
怎么做?
或者有比我更好的解决方案吗?
查看MultipleInputs http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapred/lib/MultipleInputs.html解决这个问题的类。这非常整洁——你传入InputFormat
以及可选的Mapper
class.
如果您正在谷歌上寻找代码示例,请搜索“Reduce-side join”,这是通常使用此方法的地方。
另一方面,有时我发现使用 hack 更容易。例如,如果您有一组以空格分隔的文件,另一组以下划线分隔,则使用相同的映射器加载这两个文件并TextInputFormat
并对两个可能的分隔符进行标记。计算两个结果集中的标记数量。在字数统计示例中,选择具有更多标记的那个。
如果两个文件具有相同的分隔符但具有不同数量的标准列,这也适用。您可以对逗号进行标记,然后查看有多少个标记。如果是 5 个令牌,则来自数据集 A,如果是 7 个令牌,则来自数据集 B。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)