Apache spark Spark Streaming如何保证多个foreachRDD的顺序

Apache spark Spark Streaming如何保证多个foreachRDD的顺序,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我想在数据流上执行一系列操作。操作N+1必须在操作N之后执行。这些实现之间有什么区别 val myDStream = ??? //version 1 myDStream.foreachRDD(rdd => action 1) myDStream.foreachRDD(rdd => action 2) myDStream.foreachRDD(rdd => action 3) //version 2 myDStream.foreachRDD{rdd => acti

我想在数据流上执行一系列操作。操作N+1必须在操作N之后执行。这些实现之间有什么区别

val myDStream = ???

//version 1
myDStream.foreachRDD(rdd => action 1)
myDStream.foreachRDD(rdd => action 2)
myDStream.foreachRDD(rdd => action 3)

//version 2
myDStream.foreachRDD{rdd => 
  action 1
  action 2
  action 3
}


如果我们假设每个
动作
对完整的RDD进行操作,例如
动作(RDD)
,那么这两个表达式在结果顺序上应该是等价的


在执行级别,顶部版本将生成三个spark作业,而底部版本将只生成一个。

如果我们假设每个
操作
都在完整的RDD上运行,例如
操作(RDD)
,那么这两个表达式在结果顺序上应该是等效的


在执行级别,顶部版本将生成三个spark作业,而底部版本将只生成一个。

让我们假设每个操作(实际上操作整个rdd)。这是非常资源密集型的。哪个版本更好(分为3个单独的spark作业或作为单个作业)?我怀疑使用一种或另一种方法会有显著差异。RDD上的操作将自行触发作业提交,并将获得可用的资源。这两种方法都保证是顺序的,所以我看不出有什么显著的区别。但是您可以尝试两者并进行比较,因为在两者之间切换不需要太多的代码更改。这是非常资源密集型的。哪个版本更好(分为3个单独的spark作业或作为单个作业)?我怀疑使用一种或另一种方法会有显著差异。RDD上的操作将自行触发作业提交,并将获得可用的资源。这两种方法都保证是顺序的,所以我看不出有什么显著的区别。但您可以尝试两者并进行比较,因为在两者之间切换不需要太多代码更改。