2017-03-25 105 views
2

我目前挣扎以下:如何计算ApacheSpark中的数据帧API中的z分数?

z得分被定义为:

Z =(许)/ SD

(其中x是单个值,的U的平均窗口和SD窗口的标准偏差)

我可以在窗口上计算出u和sd,但不知道如何将每个单独的x值“结转”到结果数据帧中以计算z得分对于每一个价值,这是我到目前为止有多远:

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”会将每个值从源数据帧传递到结果,但情况并非如此

任何想法?

+0

任何想法为什么这个问题得到了投票?我仍然陷在同样的问题中...... –

回答

0

我现在找到了答案 - 答案是不可能的,因为groupBy返回一个org.apache.spark.sql.GroupedData对象,它只支持额外的聚合(当然)不允许访问到分组行的个别值。这post解释是非常好的,