【问题标题】:How to calculate z-score on dataframe API in ApacheSpark stucured streaming?如何在 ApacheSpark 结构化流中计算数据帧 API 的 z 分数?
【发布时间】:2017-03-28 06:11:35
【问题描述】:

我目前正在努力解决以下问题:

z-score 定义为:

z = (x-u)/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" 会将源数据帧中的每个值传递到结果中,但事实并非如此

有什么想法吗?

【问题讨论】:

  • 知道为什么这个问题被否决了吗?我仍然被同样的问题困住......

标签: scala apache-spark statistics time-series spark-streaming


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2016-10-12
    • 2021-12-03
    • 1970-01-01
    • 2021-10-23
    • 2016-04-14
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多