Apache spark Spark中的缺省分区方案

Apache spark Spark中的缺省分区方案,apache-spark,rdd,partitioning,Apache Spark,Rdd,Partitioning,当我执行以下命令时: scala>val-rdd=sc.parallelize(列表((1,2)、(3,4)、(3,6)),4).partitionBy(新的HashPartitioner(10)).persist() rdd:org.apache.spark.rdd.rdd[(Int,Int)]=ShuffledRDD[10]位于分区比:22 scala>rdd.partitions.size res9:Int=10 scala>rdd.partitioner.isDefined res10:

当我执行以下命令时:

scala>val-rdd=sc.parallelize(列表((1,2)、(3,4)、(3,6)),4).partitionBy(新的HashPartitioner(10)).persist()
rdd:org.apache.spark.rdd.rdd[(Int,Int)]=ShuffledRDD[10]位于分区比: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(列表((1,2)、(3,4)、(3,6)),4)
...
scala>rdd.partitions.size
res6:Int=4
scala>rdd.partitioner.isDefined
res8:Boolean=false

它说有4个分区,并且没有定义分区器。那么,Spark中的默认分区方案是什么呢?/在第二种情况下,数据是如何分区的

你必须区分两种不同的东西:

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

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


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

谢谢您的回答。这是否意味着,当我们使用paritionBy对键值对RDD的数据进行分组时,它们会被hash paritioner分区,并且位于同一个工作节点中,但分区不同。