Apache spark apachespark分区分发策略

Apache spark apachespark分区分发策略,apache-spark,Apache Spark,apachespark中有一些分区策略。散列分区、范围分区和编写自定义分区的能力。但是分区是如何按集群节点分布的呢?有什么方法可以影响这一点吗?Spark中的分区分布取决于数据源和您的配置。您引用的分区器在手动重新分区操作(如合并或重新分区)期间使用。当您决定这样做时,Spark有时会在节点之间洗牌数据(如果将shuffle flat设置为true)。分区器还用于一些基于RDD的操作,例如RDD.sortByKey,它看起来像: def sortByKey(ascending: Boolean

apachespark中有一些分区策略。散列分区、范围分区和编写自定义分区的能力。但是分区是如何按集群节点分布的呢?有什么方法可以影响这一点吗?

Spark中的分区分布取决于数据源和您的配置。您引用的分区器在手动重新分区操作(如合并或重新分区)期间使用。当您决定这样做时,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)分区的文章。如果您感兴趣,可以看看: