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
Pypark公司:
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
5条答案
按热度按时间sirbozc51#
对于未来的Pypark用户:
vdgimpew2#
每个分区的记录数如下:
但这也会自己启动spark作业(因为spark必须读取文件才能获得记录数)。
spark也可以读取配置单元表统计信息,但我不知道如何显示这些元数据。。
4sup72z83#
spark/scala公司:
Pypark公司:
同样的情况也可能发生在
dataframe
,不仅仅是为了RDD
. 只需添加DF.rdd.glom
... 输入上面的代码。字幕:mike dusenberry@https://issues.apache.org/jira/browse/spark-17817
frebpwbc4#
spark 1.5解决方案:
(
sparkPartitionId()
存在于org.apache.spark.sql.functions
)正如@raphael roth提到的
mapPartitionsWithIndex
是最好的方法,将适用于所有版本的spark,因为它基于rdd的方法fgw7neuy5#
我会使用内置函数。它应该尽可能地高效: