有没有办法获取DataFrame的当前分区数? 我检查了DataFrame javadoc(spark 1.6)并没有找到方法,或者我只是错过了它? (在JavaRDD的情况下,有一个getNumPartitions()方法。)
答案 0 :(得分:93)
您需要在DataFrame的基础RDD上调用getNumPartitions()
,例如df.rdd.getNumPartitions()
。对于Scala,这是一个无参数的方法:df.rdd.getNumPartitions
。
答案 1 :(得分:8)
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
答案 2 :(得分:7)
转换为RDD然后获取分区长度
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="fruits">[ Banana Apple Orange Melon Papaya ][ Avocado Coconut Strawberry ]</div>
答案 3 :(得分:6)
val df = Seq(
("A", 1), ("B", 2), ("A", 3), ("C", 1)
).toDF("k", "v")
df.rdd.getNumPartitions
答案 4 :(得分:1)
获得分区数量的另一种有趣的方法是“使用mapPartitions”转换。 示例代码-
val x = (1 to 10).toList
val numberDF = x.toDF()
numberDF.rdd.mapPartitions(x => Iterator[Int](1)).sum()
欢迎火花专家对其性能发表评论。