developer tip

DataFrame의 현재 파티션 수 가져 오기

optionbox 2021. 1. 6. 08:05
반응형

DataFrame의 현재 파티션 수 가져 오기


DataFrame의 현재 파티션 수를 얻는 방법이 있습니까? DataFrame javadoc (spark 1.6)을 확인했지만 그 방법을 찾지 못했거나 놓쳤습니까? (JavaRDD의 경우 getNumPartitions () 메소드가 있습니다.)


getNumPartitions()DataFrame의 기본 RDD 를 호출해야합니다 ( 예 : df.rdd.getNumPartitions(). Scala의 경우 매개 변수가없는 메서드 : df.rdd.getNumPartitions.


dataframe.rdd.partitions.sizedf.rdd.getNumPartitions()또는 와는 다른 대안 df.rdd.length입니다.

전체 예를 들어 설명하겠습니다 ...

val x = (1 to 10).toList
val numberDF = x.toDF(“number”)
numberDF.rdd.partitions.size // => 4

위에서 얻은 파티션 수를 증명하려면 데이터 프레임을 csv로 저장하십시오.

numberDF.write.csv(“/Users/Ram.Ghadiyaram/output/numbers”)

다음은 데이터가 다른 파티션에서 분리되는 방법입니다.

Partition 00000: 1, 2
Partition 00001: 3, 4, 5
Partition 00002: 6, 7
Partition 00003: 8, 9, 10

업데이트 :

@Hemanth가 댓글에 좋은 질문을했습니다 ... 기본적으로 위의 경우 파티션 수가 4 인 이유

짧은 답변 : 실행중인 경우에 따라 다릅니다. local [4]를 사용했기 때문에 4 개의 파티션이 생겼습니다.

긴 대답 :

나는 내 로컬 컴퓨터에서 위의 프로그램을 실행하고 있었으며 4 개의 파티션 을 취하고 있다는 것을 기반으로 master를 local [4]로 사용했습니다 .

val spark = SparkSession.builder()
    .appName(this.getClass.getName)
    .config("spark.master", "local[4]").getOrCreate()

마스터 원사에 스파크 쉘이 있으면 파티션 수를 2로 얻었습니다.

예 : spark-shell --master yarn동일한 명령을 다시 입력했습니다.

scala> val x = (1 to 10).toList
x: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)


scala> val numberDF = x.toDF("number")
numberDF: org.apache.spark.sql.DataFrame = [number: int]

scala> numberDF.rdd.partitions.size
res0: Int = 2
  • 여기서 2는 spark의 기본 병렬 처리입니다.
  • hashpartitioner를 기반으로 스파크는 배포 할 파티션 수를 결정합니다. 당신이 실행하는 경우 --master local당신에 따라 Runtime.getRuntime.availableProcessors()즉, local[Runtime.getRuntime.availableProcessors()]이 파티션의 그 수를 할당하려고합니다. 사용 가능한 프로세서 수가 12 개인 경우 (예 : local[Runtime.getRuntime.availableProcessors()])1 ~ 10 개의 목록이있는 경우 10 개의 파티션 만 생성됩니다.

노트:

내가 스파크 프로그램을 실행하고 있고 기본적으로 파티션 / 작업의 수는 사용 가능한 모든 코어의 수인 12 코어 랩톱을 사용하는 경우, 즉 12 개입니다. 즉, local[*]또는 s"local[${Runtime.getRuntime.availableProcessors()}]")이 경우에는 10 개의 숫자 만 있으므로 제한됩니다. ~ 10

이 모든 사항을 염두에두고 직접 시도해보십시오.


RDD로 변환 한 다음 파티션 길이를 얻습니다.

DF.rdd.partitions.length

 val df = Seq(
  ("A", 1), ("B", 2), ("A", 3), ("C", 1)
).toDF("k", "v")

df.rdd.getNumPartitions

참조 URL : https://stackoverflow.com/questions/42171499/get-current-number-of-partitions-of-a-dataframe

반응형