programing

데이터 프레임의 현재 파티션 수 가져오기

javamemo 2023. 9. 27. 16:47
반응형

데이터 프레임의 현재 파티션 수 가져오기

DataFrame의 현재 파티션 수를 가져올 수 있는 방법이 있습니까?DataFrame javadoc(spark 1.6)을 확인해보니 그 방법을 찾지 못한 것인가요, 아니면 그냥 놓친 것인가요? (JavaRDD의 경우 getNumPartitions() 방법이 있습니다.)

전화를 해야합니다.getNumPartitions()예를 들어, DataFrame의 기본 RDD에서df.rdd.getNumPartitions(). Scala의 경우 매개 변수가 없는 메서드입니다.df.rdd.getNumPartitions.

dataframe.rdd.partitions.size다른 대안은 다음과 같습니다.df.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

업데이트:

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

단답 : 실행 중인 경우에 따라 달라집니다.로컬[4]을 사용한 이후로 파티션이 4개가 되었습니다.

긴 답변:

위의 프로그램을 로컬 머신에서 실행하고 있었고 4개의 파티션으로 사용되고 있다는 것을 바탕으로 마스터를 로컬[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는 스파크의 기본 평행선입니다.
  • 해시 파티셔너 스파크에 따라 배포할 파티션 수가 결정됩니다.뛰어든다면--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

여러 개의 파티션을 얻을 수 있는 또 다른 흥미로운 방법은 '맵 파티션 사용' 변환입니다.샘플 코드 -

val x = (1 to 10).toList
val numberDF = x.toDF()
numberDF.rdd.mapPartitions(x => Iterator[Int](1)).sum()

스파크 전문가들이 성능에 대해 의견을 제시하는 것을 환영합니다.

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

반응형