我在用hadoop streaming
做一些工作,我遇到一个问题,就在这里。
将输入文件 mapper
每行有3个字段。我知道 mapper
的输出将在将数据馈送到之前进行排序和分区 reducer
,我的问题是
1.我可以使用第3个字段对这些数据进行排序/分区吗?2.我能用整行数据排序吗?
附言:
另外,排序键或分区键应该是每行的前k个字段,对吗?如果是这样,是不是意味着我应该把这些字段移到 mapper
?
我在用hadoop streaming
做一些工作,我遇到一个问题,就在这里。
将输入文件 mapper
每行有3个字段。我知道 mapper
的输出将在将数据馈送到之前进行排序和分区 reducer
,我的问题是
1.我可以使用第3个字段对这些数据进行排序/分区吗?2.我能用整行数据排序吗?
附言:
另外,排序键或分区键应该是每行的前k个字段,对吗?如果是这样,是不是意味着我应该把这些字段移到 mapper
?
1条答案
按热度按时间qmelpv7a1#
Map器的输出仅根据键进行排序。
所以,假设您有输入记录:field1,field2,field3
1) 如果您不想将第一个字段作为密钥,并且可以管理第三个字段是否为密钥,则不需要执行任何其他操作,因此可以执行以下操作:
2) 同样,您可以将所有内容作为键,将null作为值,这将导致按整行排序,可以执行以下操作:
不,就排序而言,字段在输入文件中的顺序根本不重要,它只取决于作为Map器输出从Map器发出的内容。
但如果需要将field1作为Map器输出中的键,但希望对field3进行二次排序,请阅读:how to do a secondary sort on values?