我有一个递归火花算法,该算法将10天的滑动窗口应用于数据集。
原始数据集是从按日期划分的Hive表中加载的。
每次迭代时,都会将一组复杂的操作应用于包含十天窗口的数据集。
然后将最后一个日期重新插入到原始Hive表中,并从Hive加载下一个日期并将其合并为剩余的9天。
我意识到我需要打破火花谱系,以防止DAG变得难以管理。
我相信我有两种选择:
转换为rdd并再次返回
spark.createDataset(myDS.rdd)
使用第二个选项是否有任何缺点-我假设这是内存操作,因此更便宜。
答案 0 :(得分:1)
检查指向并转换回RDD确实是截断谱系的最佳/唯一方法。
许多(全部?)Spark ML数据集/数据帧算法实际上是使用RDD实现的,但是由于优化程序未并行化以及迭代/递归实现的沿袭大小,因此公开的API是DS / DF。
与RDD进行转换需要一定的成本,但要比文件系统检查点选项小。