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

Scala 计算RDD中的平均值,然后根据Spark Streaming中的平均值过滤此RDD,scala,apache-spark,apache-kafka,spark-streaming,rdd,Scala,Apache Spark,Apache Kafka,Spark Streaming,Rdd,我想在Spark Streaming中做一些我觉得很奇怪的事情,我想得到一些反馈 我有一个元组(String,Int)的数据流。假设字符串是一个id,整数是一个值 因此,对于一个微批次,我想计算字段Int的平均值,并根据这个平均值过滤相同的微批次,例如field2>average。所以我写了这段代码: lineStreams .foreachRDD( rdd => { val totalElement = rdd.count() if(totalElem

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

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

因此,对于一个微批次,我想计算字段Int的平均值,并根据这个平均值过滤相同的微批次,例如field2>average。所以我写了这段代码:

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")
            }
          }
        )
      }
    })
但实际上这段代码并没有运行,计算的第一部分看起来还行,但不是测试。 我知道这段代码中有一些不好的地方,但我只想知道逻辑是否正确

谢谢你的建议

试试看:

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