【问题标题】:For "iterative algorithms," what is the advantage of converting to an RDD then back to a Dataframe对于“迭代算法”,转换为 RDD 然后再转换回 Dataframe 有什么好处
【发布时间】:2020-08-12 23:23:17
【问题描述】:

我正在阅读高性能 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

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

【问题讨论】:

    标签: apache-spark apache-spark-sql rdd catalyst-optimizer


    【解决方案1】:

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

    第 1 步:读取 DF1、DF2

    第二步:根据 DF2 值更新 DF1

    第 3 步:读取 DF3

    第 4 步:根据 DF3 值更新 DF1

    ..等等..

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2013-11-15
      • 2017-01-02
      • 2011-08-24
      • 2011-02-15
      • 2015-01-05
      • 1970-01-01
      相关资源
      最近更新 更多