scala - 我如何获得一个 Spark 数据帧来打印它的解释计划到一个字符串

标签 scala apache-spark dataframe

我有一个系统,其中组件 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/

相关文章:

python - 合并两个具有相同列的相似数据框

scala - 这是在 Lift 中实现 GMail 小部件的正确方法吗?

scala - 为什么变量或变量的副本不同?

javascript - Scala:Play Framework 2 忽略 application.conf 中的 httpOnly 标志

scala - 如何在路径中没有分区前缀的情况下写出分区的DataFrame?

cassandra - 有时无法使用 Spark 打开 native 连接

scala - 如何更改数据框列列表的列类型

sql - 在 Apache Spark Join 中包含空值

python - 如何从列表列表中提取特定的键、值对并将其添加到数据帧?

python - 如何用python比较不同列中的同一行?