一尘不染

在pyspark中捕获explain()的结果

python

在pyspark中,运行:

sdf = sqlContext.sql("""SELECT * FROM t1 JOIN t2 on t1.c1 = t2.c1 """)

进而:

sdf.explain(extended=True)

它打印查询执行的逻辑和物理计划。

我的问题是:如何捕获输出而不是打印输出?

`v = sdf.explain(extended=True) 自然,不起作用


阅读 471

收藏
2021-01-20

共1个答案

一尘不染

如果查看源代码explain(2.4或更低版本),您会发现:

def explain(self, extended=False):
    if extended:
        print(self._jdf.queryExecution().toString())
    else:
        print(self._jdf.queryExecution().simpleString())

因此,如果要直接检索说明计划,只需_jdf.queryExecution()在数据框上使用方法:

v = sdf._jdf.queryExecution().toString()  # or .simpleString()

从3.0开始,代码为:

print(
    self._sc._jvm.PythonSQLUtils.explainString(self._jdf.queryExecution(), explain_mode)
)

删除打印后,您将获得explain一个字符串。

2021-01-20