在运行 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
语句。因此,请不要坚持这个示例代码实际上什么也没做的事实。
归档时间: |
|
查看次数: |
1866 次 |
最近记录: |