Spark流式传输:嵌套的惰性转换和未按顺序执行的操作?

时间:2018-07-27 17:58:45

标签: apache-spark apache-kafka spark-streaming lazy-evaluation

我有一些看起来像这样的代码:

JavaDStream<String> stream = KafkaUtils.createDirectStream(...)

stream.transform(rdd -> {
  log("Action phase 1")

  // transformation logic, really fast
  return transform(rdd);

}).forEachRDD(javaRDD -> {

  log("Action phase 2")
  // mapping functions with a relatively long processing delay, 
  // this will lead to some number of queued batches
  mapRdd(javaRDD);

})

当我跟踪日志时,我们注意到“操作阶段1”在日志中多次出现(时间与排队的批次数量成正比),而“操作阶段2”对于每个已处理的批次仅出现一次。似乎stream.transform()的“惰性”转换相对于RDD转换急切地执行。

我目前的理论是,流内部的Rdd转换也相对于流也懒惰地执行。因此,它是惰性转换内部的惰性转换,因此与内部转换相比,“外部”转换很热衷。

这个理论正确吗?还是这里还有其他工作?

谢谢!

0 个答案:

没有答案