【问题标题】:How to get the partitioner of a dataframe in pyspark?如何在pyspark中获取数据帧的分区器?
【发布时间】:2018-08-21 04:22:12
【问题描述】:

有很多关于如何对数据帧/rdd 进行分区以提高性能的帖子。我的问题要简单得多:显示数据帧分区器的最直接方法是什么?通过查看名称,我猜df.rdd.partitioner 会返回分区程序,但是,它总是返回 None:

df = spark.createDataFrame((("A", 1), ("B", 2), ("A", 3), ("C", 1)),['k','v']).repartition("k")

df.rdd.partitioner #None

我找到一种查找分区器的方法是读取df.explain() 的输出。但是,这会打印很多其他信息(物理计划)。有没有更直接的方法来显示数据帧/rdd 的分区器?

【问题讨论】:

  • this ?
  • @mayankagrawal:getNumPartitions 只显示一个数字,但我想查看分区器——无论是哈希、范围还是客户分区器。
  • @sgu,你介意解释一下如何从 df.explain() 中判断使用哪种类型的分区器。

标签: pyspark


【解决方案1】:

正如上面评论中的建议(mayank agrawal),我们可以使用 executionQuery 对象来获得一些见解。

如果我们没有可以使用的表:

df._jdf.queryExecution().executedPlan().prettyJson()
df._jdf.queryExecution().sparkPlan().outputPartitioning().prettyJson()

哪个符合我们的目标

或者如果我们有一个蜂巢表,那么我们也可以有这样的东西:

table = df._jdf.queryExecution().logical().tableName()

catalog = c.Catalog(spark)
for col in catalog.listColumns(table.split(".")[1], table.split(".")[0]):
    if col.isBucket:
        print(f"bucketed by {col.name}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2021-12-12
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多