如何在直接Spark SQL中指定基于结构化流时间的窗口

时间:2018-06-21 17:52:02

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

我们正在使用结构化流技术来对实时数据进行汇总。我正在创建一个可配置的Spark作业,该作业具有配置,并使用它在翻滚窗口中对行进行分组并执行聚合。我知道如何通过功能界面来做到这一点。

这是使用功能接口的代码片段

var valStream = sparkSession.sql(sparkSession.sql(config.aggSelect)) //<- 1
  .withWatermark("eventTime", "15 minutes")                          //<- 2
  .groupBy(window($"eventTime", "1 minute"), $"aggCol1", $"aggCol2") //<- 3
  .agg(count($"aggCol2").as("myAgg2Count"))

第1行执行来自配置的SQL字符串。我想将第2行和第3行移到SQL语法中,以便在配置中指定分组和聚合。

外面有人知道如何在Spark SQL中指定吗?

1 个答案:

答案 0 :(得分:1)

withWatermark没有相应的SQL语法。您必须使用数据框API。

对于聚合,您可以执行类似的操作

select count(aggcol2) as myAgg2Count
from xxx
group by window(eventTime, "1 minute"), aggCo1, aggCol2