首先,我是刚刚起步的新人,如果我错过了显而易见的事情,我们深表歉意!
我正在使用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));