gpt4 book ai didi

java - 并行处理 DStream 中的 RDD

转载 作者:行者123 更新时间:2023-12-02 04:13:52 24 4
gpt4 key购买 nike

我遇到了以下处理 Spark Streaming 中的消息的代码:

val listRDD = ssc.socketTextStream(host, port)
listRDD.foreachRDD(rdd => {
rdd.foreachPartition(partition => {
// Should I start a separate thread for each RDD and/or Partition?
partition.foreach(message => {
Processor.processMessage(message)
})
})
})

这对我有用,但我不确定这是否是最好的方法。我知道 DStream 由“一对多”RDD 组成,但是这段代码按顺序一个接一个地处理 RDD,对吧?难道没有更好的方法(方法或函数)可以让 DStream 中的所有 RDD 得到并行处理吗?我应该为每个 RDD 和/或分区启动一个单独的线程吗?我是否误解了这段代码在 Spark 下的工作原理?

不知何故,我认为这段代码没有利用 Spark 中的并行性。

最佳答案

为了方便和高效,流被划分为小 RDD(查看 micro-batching 。但是您实际上不需要将每个 RDD 分解为分区,甚至将流分解为 RDD。

这完全取决于Processor.processMessage到底是什么。如果它是单个转换函数,您只需执行 listRDD.map(Processor.processMessage) 即可获得处理消息的任何结果的流,无需您进行并行计算做很多其他事情。

如果Processor是一个保存状态的可变对象(例如,计算消息数量),那么事情会更复杂,因为您需要定义许多这样的对象来考虑并行性,并且还会稍后需要以某种方式合并结果。

关于java - 并行处理 DStream 中的 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33528035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com