복붙노트

[SCALA] 왜 SparkContext.textFile의 파티션 매개 변수는 적용되지 않습니다?

SCALA

왜 SparkContext.textFile의 파티션 매개 변수는 적용되지 않습니다?

scala> val p=sc.textFile("file:///c:/_home/so-posts.xml", 8) //i've 8 cores
p: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[56] at textFile at <console>:21

scala> p.partitions.size
res33: Int = 729

내가 팔을 기대되었다 인쇄 나는 스파크 UI에서 729 개 작업을 볼 수

편집하다:

@ zero323에 의해 제안) (재분할을 호출 한 후

scala> p1 = p.repartition(8)
scala> p1.partitions.size
res60: Int = 8
scala> p1.count

나는 아직도 심지어 스파크 쉘 인쇄 8 비록 스파크 UI에 729 개 작업을 참조하십시오.

해결법

  1. ==============================

    1.당신은 서명을 살펴 경우

    당신은 서명을 살펴 경우

    textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String] 
    

    당신은 당신이 사용하는 인수라는 minPartitions이며,이 거의 그 기능을 설명 것을 볼 수 있습니다. 심지어 어떤 경우에는 그 무시하지만 다른 문제입니다. 내부적으로 사용되는 입력 형식은 여전히 ​​분할을 계산하는 방법을 결정합니다.

    이 특별한 경우에 당신은 아마 (데이터가로드 된 후이 적용됩니다) 로딩 후 분할 크기 (이로드하는 동안 작동합니다) 또는 단순히 재분할을 높이기 위해 mapred.min.split.size를 사용할 수 있지만, 일반적으로 필요가 없을 것 그.

  2. ==============================

    2.zero323 그것을 못을 박았다,하지만 난에 좀 더 (낮은 수준) 배경을 추가 할 거라고 생각 @ 방법이 minPartitions 입력 매개 변수의 영향 파티션의 수를.

    zero323 그것을 못을 박았다,하지만 난에 좀 더 (낮은 수준) 배경을 추가 할 거라고 생각 @ 방법이 minPartitions 입력 매개 변수의 영향 파티션의 수를.

    TL은, 박사 파티션 매개 변수는 최소 파티션 (!하지 정확한) 숫자로 SparkContext.textFile에 영향을 가지고있다.

    SparkContext.textFile의 사용이 특정의 경우에, 파티션들의 수는 TEXTFILE 의해 사용 org.apache.hadoop.mapred.TextInputFormat.getSplits (jobConf, minPartitions)하여 산출된다. 스파크와 함께 분산 된 데이터는 조언을 다음과 같은 방법 파티션 (분할 일명) TextInputFormat 만 알고있다.

    하둡의 FileInputFormat의 자바 독에서 :

    이 불꽃은 하둡 API를 활용하는 방법을 아주 좋은 예이다.

    BTW, 당신은 계몽 소스를 찾을 수 있습니다 ;-)

  3. from https://stackoverflow.com/questions/34467573/why-does-partition-parameter-of-sparkcontext-textfile-not-take-effect by cc-by-sa and MIT license