对于“迭代算法”,转换为 RDD 然后再转换回 Dataframe 有什么优势

2024-05-10

我在读高性能火花作者提出以下主张:

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

示例 3-58 被标记为“通过 RDD 进行往返以削减查询计划”,并复制如下:

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

有谁知道需要此解决方法的根本原因是什么?

作为参考,已针对此问题提交了错误报告,可通过以下链接获取:https://issues.apache.org/jira/browse/SPARK-13​​346 https://issues.apache.org/jira/browse/SPARK-13346

似乎没有解决办法,但维护者已经关闭了这个问题,并且似乎不认为他们需要解决它。


根据我的理解,迭代算法的谱系不断增长,即

步骤1:读取DF1、DF2

步骤2:根据DF2值更新DF1

步骤3:读取DF3

步骤4:根据DF3值更新DF1

..etc..

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于“迭代算法”,转换为 RDD 然后再转换回 Dataframe 有什么优势 的相关文章

随机推荐