Spark迭代/递归算法-打破火花沿袭

时间:2018-09-28 13:47:24

标签: apache-spark apache-spark-sql

我有一个递归火花算法,该算法将10天的滑动窗口应用于数据集。

原始数据集是从按日期划分的Hive表中加载的。

每次迭代时,都会将一组复杂的操作应用于包含十天窗口的数据集。

然后将最后一个日期重新插入到原始Hive表中,并从Hive加载下一个日期并将其合并为剩余的9天。

我意识到我需要打破火花谱系,以防止DAG变得难以管理。

我相信我有两种选择:

  1. 检查点-涉及到对HDFS的昂贵写入。
  2. 转换为rdd并再次返回

    spark.createDataset(myDS.rdd)

使用第二个选项是否有任何缺点-我假设这是内存操作,因此更便宜。

1 个答案:

答案 0 :(得分:1)

检查指向并转换回RDD确实是截断谱系的最佳/唯一方法。

许多(全部?)Spark ML数据集/数据帧算法实际上是使用RDD实现的,但是由于优化程序未并行化以及迭代/递归实现的沿袭大小,因此公开的API是DS / DF。

与RDD进行转换需要一定的成本,但要比文件系统检查点选项小。