Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PySpark和不使用window对来自Kafka的流数据执行滚动平均_Pyspark_Apache Kafka_Pyspark Dataframes - Fatal编程技术网

使用PySpark和不使用window对来自Kafka的流数据执行滚动平均

使用PySpark和不使用window对来自Kafka的流数据执行滚动平均,pyspark,apache-kafka,pyspark-dataframes,Pyspark,Apache Kafka,Pyspark Dataframes,我一直在尝试对流数据执行数据聚合,出现以下错误: 窗口方法存在此问题-“流式数据帧/数据集不支持非基于时间的窗口” 我正在寻找一种替代窗口方法的方法来对流数据执行聚合 w = (Window .partitionBy("orig_time") .orderBy(F.col("epoch").cast('long')) .rangeBetween(-minutes(5), 0)) #windowedDeviceDF =

我一直在尝试对流数据执行数据聚合,出现以下错误:

窗口方法存在此问题-“流式数据帧/数据集不支持非基于时间的窗口”

我正在寻找一种替代窗口方法的方法来对流数据执行聚合

    w = (Window
     .partitionBy("orig_time")
     .orderBy(F.col("epoch").cast('long'))
     .rangeBetween(-minutes(5), 0))
#windowedDeviceDF = deviceDF.withColumn('rolling_average', F.avg("tag_value").over(w))
windowSpec5 = Window.partitionBy("orig_time").orderBy(F.col("epoch").cast('long')).rangeBetween(-minutes(5),0)
windowSpec10 = Window.partitionBy("orig_time").orderBy(F.col("epoch").cast('long')).rangeBetween(-minutes(10), 0)

windowedDeviceDF = deviceDF.withColumn("avg5", F.avg("tag_value").over(windowSpec5)).withColumn("avg10",F.avg("tag_value").over(windowSpec10)).withColumn('occurrences_in_5_min', F.count('epoch').over(w)).withColumn('rolling_average', F.avg("tag_value").over(w)).select(
"tag_name", "epoch", "avg5", "avg10", "occurrences_in_5_min", "rolling_average")

windowedDeviceDF = deviceDF.groupBy(deviceDF.tag_name, deviceDF.tag_value, window(deviceDF.orig_time, windowDuration, slideDuration)).avg()

与滑动窗口不同,但它避免了以某种方式保留数据

使用“指数移动平均线”:

在哪里

  • avg
    为当前平均值;这是唯一需要从一行保存到下一行的变量。(与最后N个值相反)
  • 事实
    是一个控制平均平滑度的常数分数——0.01对变化的响应非常慢;0.5响应相当快
  • xn
    us当前行中的平均值

这是否可以在不使用窗口方法的情况下实现?
avg += fact * (xn - avg)