在pyspark中,运行:
sdf = sqlContext.sql("""SELECT * FROM t1 JOIN t2 on t1.c1 = t2.c1 """)
进而:
sdf.explain(extended=True)
它打印查询执行的逻辑和物理计划。
我的问题是:如何捕获输出而不是打印输出?
`v = sdf.explain(extended=True) 自然,不起作用
如果查看源代码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一个字符串。