Scala 计算RDD中的平均值,然后根据Spark Streaming中的平均值过滤此RDD
我想在Spark Streaming中做一些我觉得很奇怪的事情,我想得到一些反馈 我有一个元组(String,Int)的数据流。假设字符串是一个id,整数是一个值 因此,对于一个微批次,我想计算字段Int的平均值,并根据这个平均值过滤相同的微批次,例如field2>average。所以我写了这段代码: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
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)
}}
尝试: