我有一个系统,其中组件 A 将 sql 传递给组件 B,然后 B 通过 apache spark 运行 sql,并返回结果。
出于调试目的,我正在设置第二个通信 channel ,A 可以在其中将 sql 传递给 B 并请求和解释计划。
B 中的代码如下所示:
def handleExplain(sql: String, extended: Boolean): String = {
val dataFrame = sparkContext.sql(sql)
dataFrame.explain(extended)
}
问题是“explain”不返回字符串,它只是将解释计划打印到控制台。如何获取打印到控制台的字符串内容?是否有其他功能,或者我必须从控制台中取出它?
最佳答案
所有查询计划,包括字符串表示,都可以通过相应的 QueryExecution
访问目的。例如获取完整的执行计划:
val ds: Dataset[_] = ???
ds.queryExecution.toString
唯一的逻辑计划:
ds.queryExecution.logical.toString
优化的逻辑计划:
ds.queryExecution.optimizedPlan.toString
或执行/物理计划:
ds.queryExecution.executedPlan
关于scala - 我如何获得一个 Spark 数据帧来打印它的解释计划到一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614122/