我想在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")
}
}
)
}
})
但实际上这段代码没有运行,计算的第一部分看起来不错,但不是测试。 我知道这段代码中有一些脏东西,但我只是想知道逻辑是否正常。
谢谢你的建议!
答案 0 :(得分:0)
尝试:
lineStreams.transform { rdd => {
val mean = rdd.values.map(_.toDouble).mean
rdd.filter(_._2.toDouble > mean)
}}