4

我正在阅读高性能 Spark,作者提出以下主张:

尽管 Catalyst 优化器非常强大,但它目前遇到的挑战之一是具有非常大的查询计划。这些查询计划往往是迭代算法的结果,如图形算法或机器学习算法。一个简单的解决方法是在每次迭代结束时将数据转换为 RDD 并返回 DataFrame/Dataset,如示例 3-58 所示。

示例 3-58 被标记为“Round trip through RDD to cut query plan”,复制如下:

val rdd = df.rdd
rdd.cache()
sqlCtx.createDataFrame(rdd. df.schema)

有谁知道使这种解决方法成为必要的根本原因是什么?

作为参考,已为此问题提交了一份错误报告,可在以下链接中找到: https ://issues.apache.org/jira/browse/SPARK-13​​346

似乎没有修复,但维护者已经关闭了这个问题,并且似乎不相信他们需要解决它。

4

1 回答 1

0

据我了解,沿袭在迭代算法中不断增长,即

第 1 步:读取 DF1、DF2

步骤 2:根据 DF2 值更新 DF1

第 3 步:读取 DF3

第 4 步:根据 DF3 值更新 DF1

..ETC..

在这种情况下,DF1 沿袭不断增长,除非使用 DF1.rdd 将其截断,否则它将在 20 次左右迭代后使驱动程序崩溃。

于 2021-02-04T03:01:36.450 回答