如何在Streaming DataFrame上执行多次窗口操作?

时间:2017-08-30 07:04:28

标签: scala apache-spark apache-spark-sql spark-structured-streaming

我在DataFrame中有3列: - [time:TimeStamp,col1:Double,col2:Double] 我想执行以下操作:

dataFrame.withWatermark("time", "10 seconds")
         .groupBy(window(col("time"),"10 seconds","1 second"))
         .agg(mean("col1") with window of 10 seconds,max("col") with window of 5 seconds)` 

2 个答案:

答案 0 :(得分:2)

尚不支持单个流式查询中不同密钥集(不同窗口=不同分组密钥)的多个聚合。您必须运行2个不同的查询。

答案 1 :(得分:-1)

包含多个聚合的动态规则(Avg,Max,..等Spark Spark Supported)在2.2之前无法应用于Spark Structured Streaming。 即使打破查询并加入它们,Spark也会将其视为多个聚合并抛出异常。

逻辑计划示例: Aggr1:聚合 [EventTime#29,CategoryName#15],[EventTime#29,CategoryName#15, sum (ItemValue#10)AS sum(ItemValue)#64]

Aggr2:聚合 [EventTime#84,CategoryName#105],[EventTime#84,CategoryName#105, avg (ItemValue#100)AS avg(ItemValue) #78]

org.apache.spark.sql.AnalysisException:流式DataFrames / Datasets不支持多个流式聚合;;