【问题标题】:Unexpected behaviour with print()print() 的意外行为
【发布时间】:2016-05-01 19:07:15
【问题描述】:

我正在尝试从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 的功能缺少什么会导致这种行为?还是我做错了?

【问题讨论】:

  • parsingFunctionToRetrieveFieldX() 的代码是什么?

标签: scala parsing apache-kafka spark-streaming


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2014-10-10
    • 2020-10-04
    • 2016-07-16
    • 2016-05-10
    • 2020-07-23
    相关资源
    最近更新 更多