通过mapper,我制作了多个键,然后将它们传递给reducer来执行一些功能。有没有办法一次把多把钥匙送到同一个减速机上?实际上,我一次需要与单个reducer中的键关联的值。提前谢谢!
rryofs0p1#
如果您只想将多个键划分到同一个reducer中,那么只需编写一个定制的 Partitioner 并为要一起分区的键生成相同的int。因为您会意识到分区是不够的,而且您还希望将多个键发送到 reduce(K k, Iterator<V>) 一次,您可能还需要实现一个比较器,使比较的多个键相等,并将比较器设置为 job.setGroupingComparatorClass(GourpingClass.class) .作为改编自 Hadoop: The definitive Guide P279 :您的数据如下:
Partitioner
reduce(K k, Iterator<V>)
job.setGroupingComparatorClass(GourpingClass.class)
Hadoop: The definitive Guide P279
1990 35 A1 A2 A3 A4 1990 34 B1 B2 B3 B4 1990 34 C2 C2 C3 C4 1991 36 [other data here] 1991 35 [other data here]
如果您想将year和degree作为map输出的组合键,并且只将不同年份的键划分到不同的reducer中,那么您只需要实现 YearPartitioner :
YearPartitioner
public static class YearPartitioner extends Partitioner<CombineKey, V> { int getPartition(CombineKey k, V value, int numPartitions) { return k.getyear % numPartitions; } }
并设置 YearPartitioner 作为 job.setPartitionerClass(YearPartitoner.class) ,通过这样做,您1990年的数据将全部发送到同一个减速机,并定制 reduce() 我会先打电话给你的 <1990,35> 作为关键,以及 <<A1 A2 A3 A4>> 作为值列表,并再次由 <1990, 34> 作为关键和 <<B1 B2 B3 B4>,<C2 C2 C3 C4>> 作为值列表。如果你想走得更远 reduce 被叫 <1990,x> 作为关键, <<A1 A2 A3 A4>,<B1 B2 B3 B4>,<C2 C2 C3 C4>> 当值一次列出时,实现一个keycomparator并将其设置为 GroupingComparatorClass
job.setPartitionerClass(YearPartitoner.class)
reduce()
<1990,35>
<<A1 A2 A3 A4>>
<1990, 34>
<<B1 B2 B3 B4>,<C2 C2 C3 C4>>
reduce
<1990,x>
<<A1 A2 A3 A4>,<B1 B2 B3 B4>,<C2 C2 C3 C4>>
GroupingComparatorClass
1条答案
按热度按时间rryofs0p1#
如果您只想将多个键划分到同一个reducer中,那么只需编写一个定制的
Partitioner
并为要一起分区的键生成相同的int。因为您会意识到分区是不够的,而且您还希望将多个键发送到
reduce(K k, Iterator<V>)
一次,您可能还需要实现一个比较器,使比较的多个键相等,并将比较器设置为job.setGroupingComparatorClass(GourpingClass.class)
.作为改编自
Hadoop: The definitive Guide P279
:您的数据如下:
如果您想将year和degree作为map输出的组合键,并且只将不同年份的键划分到不同的reducer中,那么您只需要实现
YearPartitioner
:并设置
YearPartitioner
作为job.setPartitionerClass(YearPartitoner.class)
,通过这样做,您1990年的数据将全部发送到同一个减速机,并定制reduce()
我会先打电话给你的<1990,35>
作为关键,以及<<A1 A2 A3 A4>>
作为值列表,并再次由<1990, 34>
作为关键和<<B1 B2 B3 B4>,<C2 C2 C3 C4>>
作为值列表。如果你想走得更远
reduce
被叫<1990,x>
作为关键,<<A1 A2 A3 A4>,<B1 B2 B3 B4>,<C2 C2 C3 C4>>
当值一次列出时,实现一个keycomparator并将其设置为GroupingComparatorClass