Apache spark Spark迭代/递归算法-打破Spark沿袭
我有一个递归spark算法,它对数据集应用10天的滑动窗口 原始数据集是从按日期分区的配置单元表加载的 在每次迭代中,对包含十天窗口的数据集应用一组复杂的操作 最后一个日期随后被插入到原始配置单元表中,下一个日期从配置单元加载并联合到剩余的九天 我意识到我需要打破星火血统,以防止DAG变得难以管理 我相信我有两个选择:Apache spark Spark迭代/递归算法-打破Spark沿袭,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个递归spark算法,它对数据集应用10天的滑动窗口 原始数据集是从按日期分区的配置单元表加载的 在每次迭代中,对包含十天窗口的数据集应用一组复杂的操作 最后一个日期随后被插入到原始配置单元表中,下一个日期从配置单元加载并联合到剩余的九天 我意识到我需要打破星火血统,以防止DAG变得难以管理 我相信我有两个选择: 检查点—涉及到对HDFS的昂贵写入 转换为rdd并再次返回 spark.createDataset(myDS.rdd) 使用第二个选项有什么缺点吗?我假设这是内存中的操作,因此更
使用第二个选项有什么缺点吗?我假设这是内存中的操作,因此更便宜。检查点并转换回RDD确实是截断沿袭的最佳/唯一方法 许多(全部?)Spark ML数据集/数据帧算法实际上是使用RDD实现的,但公开的API是DS/DF,因为优化器没有并行化,并且沿袭了迭代/递归实现的规模
转换为RDD和从RDD转换都有成本,但比文件系统检查点选项要小 检查点并转换回RDD确实是截断沿袭的最佳/唯一方法 许多(全部?)Spark ML数据集/数据帧算法实际上是使用RDD实现的,但公开的API是DS/DF,因为优化器没有并行化,并且沿袭了迭代/递归实现的规模
转换为RDD和从RDD转换都有成本,但比文件系统检查点选项要小 你说你有一个DF.read的循环怎么样?那么血统是如何运作的呢@Garren SIf我理解你的问题,一个循环多次读取调用的应用程序,每次读取都独立于最后一次读取,血统不应该是一个问题,因为每次读取都是它自己的工作。如果您继续将相同的数据集转换为RDD,然后再转换回来,沿袭将被截断。好的,明白了。读到这个问题,我们不禁纳闷。这就澄清了这一点。周末愉快。转换为rdd,然后调用
createDataFrame
是否会将rdd收集到驱动程序中?我只在主机上的本地数据上使用了createDataFrame
,我现在正在尝试,但驱动程序内存不足,导致崩溃-不确定这是否是createDataFrame
调用yetI在每次迭代中都需要截断dag,因为我的udf调用会随着每次迭代而不断增加。我必须避免检查点和缓存。正在转换为rdd并返回一个最佳解决方案,它会截断dag。如果您有一个DF.read循环,会怎么样?那么血统是如何运作的呢@Garren SIf我理解你的问题,一个循环多次读取调用的应用程序,每次读取都独立于最后一次读取,血统不应该是一个问题,因为每次读取都是它自己的工作。如果您继续将相同的数据集转换为RDD,然后再转换回来,沿袭将被截断。好的,明白了。读到这个问题,我们不禁纳闷。这就澄清了这一点。周末愉快。转换为rdd,然后调用createDataFrame
是否会将rdd收集到驱动程序中?我只在主机上的本地数据上使用了createDataFrame
,我现在正在尝试,但驱动程序内存不足,导致崩溃-不确定这是否是createDataFrame
调用yetI在每次迭代中都需要截断dag,因为我的udf调用会随着每次迭代而不断增加。我必须避免检查点和缓存。正在转换为rdd并返回最佳解决方案,它将截断dag。