apache-spark - repartition - spark shuffle partition




파티션에있는 요소의 수를 얻는 방법? (2)

파티션 ID가 주어지면 스파크 RDD 파티션의 요소 수를 구할 수있는 방법이 있습니까? 전체 파티션을 검사하지 않습니다.

이 같은:

Rdd.partitions().get(index).size()

나는 spark 용 API를 보지 않는다. 어떤 아이디어? 해결 방법은 무엇입니까?

감사


PySpark :

num_partitions = 20000
a = sc.parallelize(range(int(1e6)), num_partitions)
l = a.glom().map(len).collect()  # get length of each partition
print(min(l), max(l), sum(l)/len(l), len(l))  # check if skewed

스파크 / 스칼라 :

val numPartitions = 20000
val a = sc.parallelize(0 until 1e6.toInt, numPartitions )
val l = a.glom().map(_.length).collect()  # get length of each partition
print(l.min, l.max, l.sum/l.length, l.length)  # check if skewed

크레딧 : Mike Dusenberry @ https://issues.apache.org/jira/browse/SPARK-17817

RDD뿐 아니라 데이터 프레임에서도 마찬가지입니다. 위의 코드에 DF.rdd.glom ...을 추가하십시오.


pzecevic의 해답은 작동하지만, 개념적으로 배열을 만들고 iterator로 변환 할 필요가 없다. 필자는 반복기를 직접 생성 한 다음 콜렉트 콜을 통해 카운트를 얻는다.

rdd.mapPartitions(iter => Iterator(iter.size), true).collect()

추신 : Iterator.apply가 인수를 배열로 변환 할 가능성이 높기 때문에 그의 답변이 실제로 더 많은 작업을 수행하는지 확신 할 수 없습니다.





partitioning