Apache spark 至于;“迭代算法”;转换为RDD然后再转换回数据帧有什么好处
我正在阅读《高性能火花》,作者提出以下主张: 虽然Catalyst优化器非常强大,但它目前遇到的挑战之一是非常大的查询计划。这些查询计划往往是迭代算法的结果,如图算法或机器学习算法。一个简单的解决方法是在每次迭代结束时将数据转换为RDD并返回到DataFrame/Dataset,如示例3-58所示 示例3-58标记为“通过RDD往返切割查询计划”,如下所示:Apache spark 至于;“迭代算法”;转换为RDD然后再转换回数据帧有什么好处,apache-spark,apache-spark-sql,rdd,catalyst-optimizer,Apache Spark,Apache Spark Sql,Rdd,Catalyst Optimizer,我正在阅读《高性能火花》,作者提出以下主张: 虽然Catalyst优化器非常强大,但它目前遇到的挑战之一是非常大的查询计划。这些查询计划往往是迭代算法的结果,如图算法或机器学习算法。一个简单的解决方法是在每次迭代结束时将数据转换为RDD并返回到DataFrame/Dataset,如示例3-58所示 示例3-58标记为“通过RDD往返切割查询计划”,如下所示: val rdd = df.rdd rdd.cache() sqlCtx.createDataFrame(rdd. df.schema)
val rdd = df.rdd
rdd.cache()
sqlCtx.createDataFrame(rdd. df.schema)
有人知道这一解决方案之所以必要的根本原因吗
为供参考,已就此问题提交了一份缺陷报告,可通过以下链接获取:
似乎没有解决办法,但维护人员已经解决了这个问题,似乎不认为他们需要解决它。据我所知,沿袭在迭代算法中不断增长,即 步骤1:读取DF1、DF2 步骤2:根据DF2值更新DF1 步骤3:读取DF3 步骤4:根据DF3值更新DF1 ……等等 在这种情况下,DF1沿袭将继续增长,除非使用DF1.rdd对其进行截断,否则它将在大约20次迭代后使驱动程序崩溃