Apache Spark分区分发策略

时间:2018-05-20 20:47:43

标签: apache-spark

Apache Spark中存在分区策略。散列分区,范围分区和编写自定义分区程序的功能。但是如何通过集群节点分配分区?有办法以某种方式影响这个吗?

1 个答案:

答案 0 :(得分:2)

Spark中的分区分发依赖于数据源和配置。您引用的分区程序在手动重新分区操作期间使用,例如 coalesce repartition 。当您决定这样做时,Spark有时会在节点之间混洗数据(如果shuffle flat设置为true)。分区器也用于一些基于RDD的操作,例如 RDD.sortByKey ,如下所示:

def sortByKey(ascending: Boolean = true, numPartitions: Int = self.partitions.length): RDD[(K, V)] = self.withScope 
{ 
   val part = new RangePartitioner(numPartitions, self, ascending)
   new ShuffledRDD[K, V, V](self, part).setKeyOrdering(if (ascending) ordering else ordering.reverse)
}

关于数据读取期间的分区,它取决于源类型。对于Kafka,它将是主题的分区,对于HDFS文件拆分,对于RDBMS源是数字列和AFAIK,此处不涉及分区。 前段时间我在Spark(和Spark SQL)中写了一些关于分区的帖子。如果您有兴趣,可以看看: