Apache Spark中存在分区策略。散列分区,范围分区和编写自定义分区程序的功能。但是如何通过集群节点分配分区?有办法以某种方式影响这个吗?
答案 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)中写了一些关于分区的帖子。如果您有兴趣,可以看看: