print() 的意外行为

Unexpected behaviour with print()

我正在尝试从 kafka 流中解析一些数据。以下是我目前正在做的事情。

Import /* … */

Object MyObject {
    Def main (args: Array[String]){
        /*spark streaming context set up*/

        val kafkaStream = KafkaUtils.createStream(streamingContext,zkQuorum,groupID,[per-topic number of Kafka partitions to consume])
        kafkaStream.persist(/*Storage Level*/)

        val field_1_Retrieved = kafkaStream.parsingFunctionToRetrieveField1().print
        val field_2_Retrieved = kafkaStream.parsingFunctionToRetrieveField2().print
        val field_3_Retrieved = kafkaStream.parsingFunctionToRetrieveField3().print

        ssc.start()
        ssc.awaitTermination()
    }
}

但是,这是我的输出:

-----------------------
Time xxxxxxxxxx ms
-----------------------
field_1_Retrieved
field_1_Retrieved
-----------------------
Time xxxxxxxxxy ms
-----------------------
field_2_Retrieved
field_2_Retrieved
-----------------------
Time xxxxxxxxxz ms
-----------------------
field_3_Retrieved
field_3_Retrieved

这是随机接缝,肯定不是我期望的代码。它将类似于以下内容:

Time xxxxxxxxxx ms
-----------------------
field_1_Retrieved
field_2_Retrieved
field_3_Retrieved
-----------------------
Time xxxxxxxxxy ms
-----------------------
field_1_Retrieved
field_2_Retrieved
field_3_Retrieved

我在 sparkkafka 的功能中遗漏了什么会导致此行为?还是我做错了?

这是预期的行为。 print's implementation for a DStream 以时间戳横幅开头。在多个 DStream 上调用 print 将产生多个横幅。

要实现版本 #2,您需要将原始 dstream 中的数据转换为同一 DStream 中的 3 个不同版本(可能使用平面图)。鉴于未提供 parsingFunctionToRetrieveFieldx,因此无法提供更多详细信息。