有很多关于如何对dataframe / 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()
的输出。但是,这打印了很多其他信息(物理计划)。是否有更直接的方式来显示dataframe / rdd的分区器?
答案 0 :(得分:0)
正如上面评论中所建议的(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}")