我正在阅读高性能 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-13346
似乎没有修复,但维护者已经关闭了这个问题,并且似乎不相信他们需要解决它。