Apache spark 如何计算Spark Streaming数据流中每个键或记录分组的平均值?
我对Spark Scala有个问题,我想计算数据流的平均值,我从kafka到数据流的数据如下 [(2110)、(2130)、(2120)、(3200)、(3206)、(3206)、(4150)、(4160)、(4170)] 我想这样数一数 [(2,(110+130+120)/3,(3,(200+206+206)/3,(4,(150+160+170)/3)] 然后得到这样的结果, [(2120)、(3204)、(4160)] 如何使用dstream中的scala实现这一点?我使用spark 1.6版使用映射转换输入(x,y)- [(2110)、(2130)、(2120)、(3200)、(3206)、(3206)、(4150)、(4160)、(4170)] 至(x,(y,1) [(2,(110,1)),(2,(130,1)),(2,(120,1)),(3,(200,1)),(3,(206,1)),(3,(206,1)),(4,(150,1)),(4,(160,1),(4,(170,1))] 现在,通过编写一个reduce函数来使用redudceByKeyAndWindow,该函数将添加两条记录作为- (x,(y1,1))和(x,(y2,1))到(x,(y1+y2,1+1) [(2,(360,3)),(3,(612,3)),(4,(480,3))] 现在再次运行地图以获取平均值- (x,(y1,y2))至(x,(y1/y2)) [(2120)、(3204)、(4160)] 使用映射转换输入(x,y)- [(2110)、(2130)、(2120)、(3200)、(3206)、(3206)、(4150)、(4160)、(4170)] 至(x,(y,1) [(2,(110,1)),(2,(130,1)),(2,(120,1)),(3,(200,1)),(3,(206,1)),(3,(206,1)),(4,(150,1)),(4,(160,1),(4,(170,1))] 现在,通过编写一个reduce函数来使用redudceByKeyAndWindow,该函数将添加两条记录作为- (x,(y1,1))和(x,(y2,1))到(x,(y1+y2,1+1) [(2,(360,3)),(3,(612,3)),(4,(480,3))] 现在再次运行地图以获取平均值- (x,(y1,y2))至(x,(y1/y2)) [(2120)、(3204)、(4160)]Apache spark 如何计算Spark Streaming数据流中每个键或记录分组的平均值?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我对Spark Scala有个问题,我想计算数据流的平均值,我从kafka到数据流的数据如下 [(2110)、(2130)、(2120)、(3200)、(3206)、(3206)、(4150)、(4160)、(4170)] 我想这样数一数 [(2,(110+130+120)/3,(3,(200+206+206)/3,(4,(150+160+170)/3)] 然后得到这样的结果, [(2120)、(3204)、(4160)] 如何使用dstream中的scala实现这一点?我使用spark 1.6
谢谢你。我这样使用val agg_rdd=rdd.aggregateByKey((0,0))((acc,value)=>(acc.\u 1+value,acc.\u 2+1),(acc1,acc2)=>(acc1.\u 1+acc2.\u 1,acc1.\u 2.\u 2))val sum=agg_rdd.mapValues(x=>(x.\u 1/x.\u 1/x.\u 2)和。谢谢。我这样使用val agg_rdd=d=>(acc1.\u 1+acc2.\u 1,acc1.\u 2+acc2.\u 2))val sum=agg_rdd.mapValues(x=>(x.\u 1/x.\u 2))sum.collect