gpt4 book ai didi

apache-spark - Spark中的默认分区方案

转载 作者:行者123 更新时间:2023-12-03 14:06:06 26 4
gpt4 key购买 nike

当我执行以下命令时:

scala> val rdd = sc.parallelize(List((1,2),(3,4),(3,6)),4).partitionBy(new HashPartitioner(10)).persist()
rdd: org.apache.spark.rdd.RDD[(Int, Int)] = ShuffledRDD[10] at partitionBy at <console>:22

scala> rdd.partitions.size
res9: Int = 10

scala> rdd.partitioner.isDefined
res10: Boolean = true


scala> rdd.partitioner.get
res11: org.apache.spark.Partitioner = org.apache.spark.HashPartitioner@a


它说有10个分区,分区使用 HashPartitioner完成。但是当我执行以下命令时:

scala> val rdd = sc.parallelize(List((1,2),(3,4),(3,6)),4)
...
scala> rdd.partitions.size
res6: Int = 4
scala> rdd.partitioner.isDefined
res8: Boolean = false


它说有4个分区,未定义分区。那么,Spark中的默认分区方案是什么? /在第二种情况下如何对数据进行分区?

最佳答案

您必须区分两个不同的事物:


分区作为在分区之间分配数据的方法,取决于仅限于PairwiseRDDsRDD[(T, U)])的键值。这将在分区和可以在给定分区上找到的一组键之间建立关系。
分区是将输入拆分为多个分区,其中数据被简单地分为包含连续记录的块,以实现分布式计算。确切的逻辑取决于特定的来源,但是它要么是记录数,要么是块的大小。

parallelize情况下,使用索引将数据均匀分配在分区之间。对于HadoopInputFormats(如textFile),它取决于诸如mapreduce.input.fileinputformat.split.minsize / mapreduce.input.fileinputformat.split.maxsize的属性。


因此,默认分区方案根本就没有,因为分区不适用于所有RDD。对于需要在PairwiseRDDaggregateByKeyreduceByKey等)上进行分区的操作,默认方法是使用哈希分区。

关于apache-spark - Spark中的默认分区方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34491219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com