计算RDD中的平均值,然后根据Spark Streaming中的平均值过滤此RDD

时间:2016-10-11 13:05:28

标签: scala apache-spark apache-kafka spark-streaming rdd

我想在Spark Streaming中做一些我觉得很奇怪的事情,我希望得到一些反馈。

我有一个元组的DStream(String,Int)。假设字符串是id,整数是值。

因此,对于微量分析,我想计算字段Int的平均值,并且基于该平均值,我想要过滤相同的微量分批,例如field2>平均。所以我写了这段代码:

lineStreams
  .foreachRDD(
    rdd => {
      val totalElement = rdd.count()
      if(totalElement > 0) {
        val totalSum = rdd.map(elem => elem.apply(1).toInt).reduce(_ + _)
        val average = totalSum / totalElement
        rdd.foreach(
          elem => {
            if(elem.apply(1).toInt > average){
              println("Element is higher than average")
            }
          }
        )
      }
    })

但实际上这段代码没有运行,计算的第一部分看起来不错,但不是测试。 我知道这段代码中有一些脏东西,但我只是想知道逻辑是否正常。

谢谢你的建议!

1 个答案:

答案 0 :(得分:0)

尝试:

lineStreams.transform { rdd => {
  val mean = rdd.values.map(_.toDouble).mean
  rdd.filter(_._2.toDouble > mean)
}}