Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark迭代/递归算法-打破Spark沿袭_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark Spark迭代/递归算法-打破Spark沿袭

Apache spark Spark迭代/递归算法-打破Spark沿袭,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个递归spark算法,它对数据集应用10天的滑动窗口 原始数据集是从按日期分区的配置单元表加载的 在每次迭代中,对包含十天窗口的数据集应用一组复杂的操作 最后一个日期随后被插入到原始配置单元表中,下一个日期从配置单元加载并联合到剩余的九天 我意识到我需要打破星火血统,以防止DAG变得难以管理 我相信我有两个选择: 检查点—涉及到对HDFS的昂贵写入 转换为rdd并再次返回 spark.createDataset(myDS.rdd) 使用第二个选项有什么缺点吗?我假设这是内存中的操作,因此更

我有一个递归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。