Apache PIG——在一个GROUP操作中,数据是如何在reducer之间分布的



我想知道PIG实际上是如何决定如何在reduce阶段对数据进行分区的,以及我是否可以影响数据分布以避免reducer负载不平衡。

例如:

grouped_data = GROUP data BY (year, month, day) PARALLEL 10;

是否可以更改分区,例如:1)分组操作前对数据进行洗牌或2.)改变元组中变量的顺序???

或者你建议另一种方法?

提前感谢!

默认情况下,在大多数情况下,PIG使用Hadoop的默认分区器,即HashPartitioner。

public int getPartition(K key, V value, int numReduceTasks) {
  return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}

您可以使用PARTITION BY来提供您自己的策略。

B = GROUP data BY (year, month, day) PARTITION BY foo.bar.CustomPartitioner PARALLEL 10;

最新更新