如果可以得到spark中的分区数,为什么不能确定Dataframe中的分区呢?

nhaq1z21  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(527)

使用 df.rdd.getNumPartitions() ,我们可以得到分区数。但是我们如何得到分区呢?
我还尝试从文档和所有属性(使用 dir(df) )Dataframe的。但是,我找不到任何api来提供分区 repartitioning , coalesce , getNumPartitions 都是我能找到的。
我读了这篇文章并推断spark不知道分区键。我的疑问是,如果它不知道分区键,因此也不知道分区,那么它怎么知道它们的计数呢?如果可以,如何确定分区?

cqoc49vn

cqoc49vn1#

Pypark提供 spark_partition_id() 功能。
spark\u分区\u id()
分区id的列。
注意:这是不确定的,因为它依赖于数据分区和任务调度。

  1. >>> from pyspark.sql.functions import *
  2. >>> spark.range(1,1000000)
  3. .withColumn("spark_partition",spark_partition_id())
  4. .groupby("spark_partition")
  5. .count().show(truncate=False)
  6. +---------------+------+
  7. |spark_partition|count |
  8. +---------------+------+
  9. |1 |500000|
  10. |0 |499999|
  11. +---------------+------+

分区的编号从零到 n-1 哪里 n 是你的电话号码吗 getNumPartitions() .
这就是你想要的吗?或者你真的是指Hive分割?

展开查看全部
ej83mcc0

ej83mcc02#

不如用下面的方法检查分区包含什么 mapPartitionsWithIndex 这段代码适用于一些小型数据集

  1. def f(splitIndex, elements):
  2. elements_text = ",".join(list(elements))
  3. yield splitIndex, elements_text
  4. rdd.mapPartitionsWithIndex(f).take(10)

相关问题