2017-03-25 28 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解釋是非常好的,