SparkphysicalPlanDescription字符串太大

igr*_*eld 5 apache-spark

在运行 Spark 作业时,我遇到 OOM 异常,查看堆栈跟踪我发现physicalPlanDescription太大:

它是在这里创建的:(org.apache.spark.sql.execution.QueryExecution 行:206)

private def completeString(appendStats: Boolean): String = {
...
...
s"""== Parsed Logical Plan ==
   |${stringOrError(logical.treeString(verbose = true))}
   |== Analyzed Logical Plan ==
   |$analyzedPlan
   |== Optimized Logical Plan ==
   |${stringOrError(optimizedPlanString)}
   |== Physical Plan ==
   |${stringOrError(executedPlan.treeString(verbose = true))}
""".stripMargin.trim
}
Run Code Online (Sandbox Code Playgroud)

它是根据代码中的注释为 UI 创建的。

1)我能做什么?已经使用具有 20G 堆的驱动程序。

2)为什么这个字符串不是惰性的?为什么要总是计算它?

我还打开问题:Apache Spark

根据要求示例代码:链接

运行与-XX:+UseG1GC

需要明确的是,这段代码创建了一个非常大的计划,我的实际代码要复杂得多,许多表相互连接,进行过滤和许多case when语句。因此,请不要坚持这个示例代码实际上什么也没做的事实。

小智 0

如果不需要UI,可以尝试将spark.ui.enabled设置为false。