获取DataFrame的当前分区数

时间:2017-02-11 02:24:35

标签: apache-spark dataframe apache-spark-sql

有没有办法获取DataFrame的当前分区数? 我检查了DataFrame javadoc(spark 1.6)并没有找到方法,或者我只是错过了它? (在JavaRDD的情况下,有一个getNumPartitions()方法。)

5 个答案:

答案 0 :(得分:93)

您需要在DataFrame的基础RDD上调用getNumPartitions(),例如df.rdd.getNumPartitions()。对于Scala,这是一个无参数的方法:df.rdd.getNumPartitions

答案 1 :(得分:8)

dataframe.rdd.partitions.sizedf.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()

欢迎火花专家对其性能发表评论。