데이터 프레임의 현재 파티션 수 가져오기
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
'programing' 카테고리의 다른 글
산술 연산의 왼쪽과 오른쪽은 'any', 'number' 또는 열거형이어야 합니다. (0) | 2023.09.27 |
---|---|
왜 jQuery를 두번 선언합니까? (0) | 2023.09.27 |
이미지 너비를 부모 디브의 100%로 만들되 자신의 너비보다 크지 않게 만듭니다. (0) | 2023.09.27 |
링크 도커 컨테이너(Drupal 및 MariaDB) (0) | 2023.09.27 |
구별을 사용하여 표에서 고유 레코드를 하나만 선택하는 방법 (0) | 2023.09.27 |