Spark Streaming Windowing输出

时间:2016-11-21 05:56:02

标签: scala hadoop apache-spark spark-streaming

我正在开发一个火花流应用程序,我需要打印json属性的最小值,最大值,该属性应该在每秒20秒的窗口打印最小值,最大值,滑动窗口为2秒。 基本上(对于POC)我想在作业组sparkContext的Spark UI上打印min,max。

SetJobGroup ("count-min-max", "count-min-max value of quality attribute").

这应该在Spark UI显示屏上显示每20秒。

下面是我的代码我能够获得最小值,最大值,数量,但是每2秒执行一次打印,这是在20秒的窗口上不流式播放间隔。

val ssc = new StreamingContext(sparkContext, Seconds(2))

val record = KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicMap, StorageLevel.MEMORY_ONLY_SER_2)
val lines=record.map(_._2)

      //val jsonCounts=lines.map { jsonRecord => parseJson(jsonRecord) }.map { x => x.mkString("\n") }.print

      val valueDtsream:DStream[Array[Double]]=lines.map { jsonRecord => parseJson(jsonRecord) }
                            .window(Seconds(20),Seconds(2))

      valueDtsream.foreachRDD
      {
         rdd => 
           if (!rdd.partitions.isEmpty)
           {
             val stats = rdd.flatMap(x => x)
             println(stats.count().toString()+"-"+stats.min().toString()+"-"+stats.max().toString)
           }
      }

      ssc.start()
      ssc.awaitTermination()

1 个答案:

答案 0 :(得分:0)

我认为您在slideIntervalwindowLength之间感到困惑。在window(windowLength, slideInterval)

  1. windowLength是窗口的长度,表示窗口应该为计算考虑多少个数据间隔。
  2. slideInterval是窗口计算完成后窗口移动的间隔数。
  3. 如果我理解你的问题,你应该将其编辑为:.window(Seconds(x),Seconds(20))