Scala 如何在ApacheSpark流媒体中计算数据帧API的z分数?
我目前正在努力解决以下问题: z分数定义为: z=(x-u)/sd (其中x为单个值,u为窗口的平均值,sd为窗口的标准偏差) 我可以在窗口上计算u和sd,但不知道如何将每个单独的x值“结转”到结果数据帧,以便计算每个值的z分数,这是我到目前为止取得的成绩:Scala 如何在ApacheSpark流媒体中计算数据帧API的z分数?,scala,apache-spark,statistics,time-series,spark-streaming,Scala,Apache Spark,Statistics,Time Series,Spark Streaming,我目前正在努力解决以下问题: z分数定义为: z=(x-u)/sd (其中x为单个值,u为窗口的平均值,sd为窗口的标准偏差) 我可以在窗口上计算u和sd,但不知道如何将每个单独的x值“结转”到结果数据帧,以便计算每个值的z分数,这是我到目前为止取得的成绩: val df = spark.readStream .format("org.apache.bahir.sql.streaming.mqtt.MQTTStreamSourceProvider") .option("to
val df = spark.readStream
.format("org.apache.bahir.sql.streaming.mqtt.MQTTStreamSourceProvider")
.option("topic", "topic/path")
.load("tcp://localhost:1883")
val counter = df.groupBy(
window($"timestamp", "2 seconds"),
$"value")
.agg($"value",avg($"value")+stddev($"value"))
val query = counter.writeStream
.outputMode("complete")
.format("console")
.start()
我希望.agg($“value”,avg($“value”)+stddev($“value”))中的$“value”能够将每个值从源数据帧传递到结果,但事实并非如此
有什么想法吗?我现在找到了答案-答案是这是不可能的,因为groupBy返回一个org.apache.spark.sql.GroupedData对象,它只支持额外的聚合,当然不允许访问分组行的单个值。这很好地解释了这一点,你知道为什么这个问题被否决了吗?我仍然被困在同一个问题上。。。