SparkStreaming:嵌套的惰性转换和非顺序执行的操作?

nkcskrwz  于 2021-06-08  发布在  Kafka
关注(0)|答案(0)|浏览(242)

我有一些类似这样的代码:

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转换也会延迟地执行,并且与流有关。因此,它是一个懒惰的转换内部的懒惰转换,因此“外部”的转换是渴望相比,内部转换。
这个理论正确吗?或者是别的什么在这里工作?
提前谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题