我有一个 Spark Structured Streaming Job,它从 S3 读取数据,转换数据,然后将其存储到一个 S3 接收器和一个 Elasticsearch 接收器。
目前,我正在做 readStream
一次,然后 writeStream.format("").start()
两次。这样做时,Spark 似乎从 S3 源读取数据两次,每个接收器一次。
是否有更有效的方法来写入同一管道中的多个接收器?
最佳答案
您实际上创建了两个单独的流查询。 load
部分用于描述第一个(也是唯一一个)流媒体源。这在执行方面没有任何作用。
这是描述 Spark Structured Streaming 的查询如何工作的最正确方法。接收器的数量对应于查询的数量,因为一个流式查询可以恰好有一个流式接收器(请参阅位于任何流式查询后面的 StreamExecution)。
您还可以检查线程数(使用 jconsole
或类似方法),因为结构化流式处理每个流式查询使用一个 microBatchThread
线程(请参阅 StreamExecution )。
在 Spark Structured Streaming 的当前设计中,可能是 而不是 。
关于apache-spark - 如何一次读取流数据集并输出到多个接收器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46295205/