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

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

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

cqoc49vn

cqoc49vn1#

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

>>> from pyspark.sql.functions import *
>>> spark.range(1,1000000)
      .withColumn("spark_partition",spark_partition_id())
      .groupby("spark_partition")
      .count().show(truncate=False)
+---------------+------+
|spark_partition|count |
+---------------+------+
|1              |500000|
|0              |499999|
+---------------+------+

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

ej83mcc0

ej83mcc02#

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

def f(splitIndex, elements): 
  elements_text = ",".join(list(elements))
  yield splitIndex, elements_text

rdd.mapPartitionsWithIndex(f).take(10)

相关问题