복붙노트

[SCALA] 파티션의 RDD 기본 번호를 스파크

SCALA

파티션의 RDD 기본 번호를 스파크

버전 : 스파크 1.6.2 스칼라 2.10

나는 스파크 쉘에서 명령 아래 실행하고있다. 나는 스파크가 기본적으로 생성되는 파티션의 수를 확인하려합니다.

val rdd1 = sc.parallelize(1 to 10)
println(rdd1.getNumPartitions) // ==> Result is 4

//Creating rdd for the local file test1.txt. It is not HDFS.
//File content is just one word "Hello"
val rdd2 = sc.textFile("C:/test1.txt")
println(rdd2.getNumPartitions) // ==> Result is 2

아파치 스파크 문서 당으로, spark.default.parallelism 내 노트북에서 코어 수 (2 코어 프로세서 인)입니다.

내 질문은 : rdd2이 문서에 말했듯이 개 파티션의 정확한 결과를 제공 할 것으로 보인다. 그런데 왜 rdd1 4 개 파티션으로 결과를주고있다?

해결법

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

    1.파티션의 최소 개수는 실제로 SparkContext 의해 하한 세트이다. 불꽃 후드 Hadoop을 사용하기 때문에, 하둡 InputFormat`은 여전히 ​​기본적으로 동작 할 것이다.

    파티션의 최소 개수는 실제로 SparkContext 의해 하한 세트이다. 불꽃 후드 Hadoop을 사용하기 때문에, 하둡 InputFormat`은 여전히 ​​기본적으로 동작 할 것이다.

    설정 및 하드웨어에 따라 다를 수있는 여기에 언급 된 바와 같이 첫 번째 경우 defaultParallelism을 반영한다. (코어의 번호 등)

    그래서 당신은 첫 번째 경우는 sc.defaultParallelism에 의해 기술 된 번호로 정의 될 것이라고, 조각의 수를 제공하지 않는 한 :

    scala> sc.defaultParallelism
    res0: Int = 6
    
    scala> sc.parallelize(1 to 100).partitions.size
    res1: Int = 6
    

    두번째 경우에 대해서는, sc.textFile와 기본적으로 슬라이스의 수는 파티션의 최소 수이다.

    당신이 코드 섹션에서 볼 수있는 2와 같다.

    따라서 다음 사항을 고려해야합니다 :

    예:

    의 일부 더미 텍스트 파일을 만들어 보자 :

    fallocate -l 241m bigfile.txt
    fallocate -l 4G hugefile.txt
    

    이 크기 2백41메가바이트 4GB의의 각각 2 개 파일을 생성합니다.

    우리는 우리가 각 파일을 읽을 때 어떻게되는지 볼 수 있습니다 :

    scala> val rdd = sc.textFile("bigfile.txt")
    // rdd: org.apache.spark.rdd.RDD[String] = bigfile.txt MapPartitionsRDD[1] at textFile at <console>:27
    
    scala> rdd.getNumPartitions
    // res0: Int = 8
    
    scala> val rdd2 = sc.textFile("hugefile.txt")
    // rdd2: org.apache.spark.rdd.RDD[String] = hugefile.txt MapPartitionsRDD[3] at textFile at <console>:27
    
    scala> rdd2.getNumPartitions
    // res1: Int = 128
    

    둘 다 실제로 HadoopRDDs 있습니다 :

    scala> rdd.toDebugString
    // res2: String = 
    // (8) bigfile.txt MapPartitionsRDD[1] at textFile at <console>:27 []
    //  |  bigfile.txt HadoopRDD[0] at textFile at <console>:27 []
    
    scala> rdd2.toDebugString
    // res3: String = 
    // (128) hugefile.txt MapPartitionsRDD[3] at textFile at <console>:27 []
    //   |   hugefile.txt HadoopRDD[2] at textFile at <console>:27 []
    
  2. from https://stackoverflow.com/questions/44222307/spark-rdd-default-number-of-partitions by cc-by-sa and MIT license