gpt4 book ai didi

sorting - 使用随机字段而不只是前k个字段进行排序和分区

转载 作者:行者123 更新时间:2023-12-02 21:54:58 25 4
gpt4 key购买 nike

我正在使用hadoop streaming来完成某些工作,但是遇到问题了。

每行mapper的输入文件有3个字段。我知道mapper的输出将在将数据提供给o​​jit_code之前进行排序和分区,而我的问题是

1.我可以使用第三rd 字段对这些数据进行排序/分区吗?
2.我可以使用整行对数据进行排序吗?

PS:

AFAIK,排序键或分区键应该是每行的前k个字段,对吗?如果是这样,是否意味着我应该将这些字段移到reducer的行的开头?

最佳答案

映射器的输出仅根据键排序。

因此,假设您输入的记录为: field1 field2 field3

1)如果您不想将第一个字段用作键,并且可以管理第三个字段是否为键,那么您无需执行其他任何操作,因此可以执行以下操作:

output.collect(new Text(field3), new Text(field1 + ","+field2)); //Old API
context.write(new Text(field3), new Text(field1 + ","+field2)); //New API

2)同样,您可以将所有内容作为键,将null作为值,这将导致按整行进行排序,可以执行以下操作:
output.collect(new Text(field1 + ","+field2 + "," + field3), null); // Old API
context.write(new Text(field1 + ","+field2 + "," + field3), null); // New API

不,就排序而言,字段在输入文件中的顺序完全无关紧要,仅取决于您从映射器作为映射器输出发出的内容。

但是,如果您需要将 field1 作为映射器输出的键,但是想要对 field3 进行二级排序,请阅读: How to do a secondary sort on values ?

关于sorting - 使用随机字段而不只是前k个字段进行排序和分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com