我想知道PIG如何确实如何在减少阶段对数据进行分区,以及我是否可以影响数据分布以避免不平衡的减速器负载。
例如:
grouped_data = GROUP data BY (year, month, day) PARALLEL 10;
是否可以通过以下方式更改分区: 1.)在组操作之前洗牌数据 要么 2.)改变元组中变量的顺序 ???
或者你建议采用不同的方法吗?
提前致谢!
答案 0 :(得分:1)
默认情况下,在大多数情况下,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;