apache-spark - repartition - what is spark partition



Spark의 기본 파티션 나누기 계획 (1)

서로 다른 두 가지를 구별해야합니다.

  • PairwiseRDDs ( RDD[(T, U)] )에만 제한되는 키의 값에 따라 파티션간에 데이터를 분배하는 것으로 파티셔닝합니다. 이것은 파티션과 주어진 파티션에서 찾을 수있는 키 세트 사이의 관계를 만듭니다.
  • 데이터를 분배 계산을 가능하게하는 연속적인 레코드를 포함하는 청크로 간단하게 분할되는 다중 분할로 분할 입력으로 분할. 정확한 로직은 특정 소스에 의존하지만 레코드 수 또는 청크 크기입니다.

    parallelize 경우 인덱스를 사용하여 파티션간에 데이터가 고르게 분산됩니다. HadoopInputFormats (예 : textFile )의 경우 HadoopInputFormats 와 같은 속성에 따라 다릅니다.

따라서 파티셔닝은 모든 RDD에 적용 할 수 없으므로 기본 파티셔닝 스키마는 아무 것도 아닙니다. PairwiseRDD ( aggregateByKey , reduceByKey 등)에서의 분할을 필요로하는 조작의 경우, 디폴트의 메소드는 해시 파티셔닝을 사용합니다.

아래 명령을 실행할 때 :

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 사용하여 파티션이 완료 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의 기본 파티셔닝 계획은 무엇입니까? / 두 번째 경우에는 데이터가 어떻게 분할됩니까?





partitioning