spark分区

spark 重分区算子 repartition 和 partitionBy  都是对数据进行重新分区,默认都是使用 HashPartitioner,区别在于partitionBy 只能用于 PairRdd,但是当它们同时都用于 PairRdd时,效果也是不一样的

repartition 使用随机key做hash

partitionBy  使用当前key做hash

 

自定义分区

创建方式

import org.apache.spark.Partitioner;

public class MyPartitioner extends Partitioner {
    private int partition;

    public MyPartitioner(int partition) {
        this.partition = partition;
    }

    public MyPartitioner() {
        this.partition = 2;
    }

    @Override
    public int numPartitions() {
        return partition;
    }

    @Override
    public int getPartition(Object key) {
        System.out.println(key);
        return key.toString().hashCode() % partition;
    }
}

使用方式

JavaPairRDD.partitionBy(new MyPartitioner());

你可能感兴趣的:(大数据工具,spark,java后端)