在pyspark中,运行以下命令:
sdf = sqlContext.sql("""SELECT * FROM t1 JOIN t2 on t1.c1 = t2.c1 """)
然后:
sdf.explain(extended=True)
它会打印查询执行的逻辑和物理计划。
我的问题是:如何在变量中捕获输出,而不是将其打印出来?
自然而然地,v = sdf.explain(extended=True)无法工作。
explain
的源代码,您会发现: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)
)
去掉 print,你会得到一个字符串形式的 explain
。
explain_mode
的取值为 "simple" 和 "extended"。 - John Haberstrohexplain_mode
的取值可以是“simple”和“extended”。 - undefined