我有一些类似这样的代码:
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转换也会延迟地执行,并且与流有关。因此,它是一个懒惰的转换内部的懒惰转换,因此“外部”的转换是渴望相比,内部转换。
这个理论正确吗?或者是别的什么在这里工作?
提前谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!