带火花结构化流的窗口延迟/增量

时间:2019-06-06 22:22:36

标签: apache-spark spark-structured-streaming

首先,我是刚刚起步的新人,如果我错过了显而易见的事情,我们深表歉意!

我正在使用Spark开发POC,该POC消耗来自Apache Kafka的数据流。我的第一个目标是一般的移动平均线,使用Spark中的“窗口”功能很简单,然后根据一些键计算一些平均线。

我的下一个目标是计算自上一个窗口以来的“增量”。因此,如果我有一个参数调用“ noise”,则“ window”函数将计算avg(noise)。但是我还想在当前窗口和上一个窗口之间包含平均值(噪声)的增量。

我尝试使用lag函数,但是看起来不像这样:

Non-time-based windows are not supported on streaming DataFrames/Datasets

我的问题是,Spark Structure Streaming是否提供一些开箱即用的计算方法?我已经考虑过使用MapGroupsWithStateFunction,但我认为这可能会起作用,但是如果有内置方法显然更可取。

我对此的代码是:

WindowSpec w = Window.partitionBy(functions.col("window.start"), functions.col("keyName")).orderBy(functions.col("window.start"));

Dataset<Row> outputDS = inputDataset.withWatermark("timeStamp", "1 days")
        .groupBy(functions.col("keyName"), functions.window(functions.col("timeStamp"), "1 hours", "1 hours"))
        .avg("noise").withColumn("delta", functions.lag("avg(noise)", 1).over(w));

0 个答案:

没有答案