Spark 中的默认分区方案

2024-04-25

当我执行以下命令时:

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 中的默认分区方案是什么? / 第二种情况下数据如何分区?


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

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

    的情况下parallelize数据使用索引均匀分布在分区之间。的情况下HadoopInputFormats (like textFile)这取决于像这样的属性mapreduce.input.fileinputformat.split.minsize / mapreduce.input.fileinputformat.split.maxsize.

所以默认的分区方案就是无,因为分区并不适用于所有 RDD。对于需要分区的操作PairwiseRDD (aggregateByKey, reduceByKey等)默认方法是使用哈希分区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中的默认分区方案 的相关文章

随机推荐