apache-spark - 使用 Spark 结构化流的窗口化滞后/增量
问题描述
首先,我对火花很陌生,如果我错过了明显的东西,请道歉!
我正在使用 Spark 开发 POC,它使用来自 Apache Kafka 的数据流。我的第一个目标是使用 Spark 中的“窗口”功能很简单的一般移动平均线,并根据一些键计算一些平均值。
我的下一个目标是计算自上一个窗口以来的“增量”。因此,如果我有一个参数调用“噪声”,则“窗口”函数会计算 avg(noise)。但我还想包括当前窗口与前一个窗口之间的 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));
解决方案
推荐阅读
- r - 仅保留 R 中第 2 个模式之前的部分
- azure-timeseries-insights - 塑造来自不同设备的事件(即不同的 json 属性)
- angular - Angular 7 CoreUI:将路由器用于分支 URL 图像链接
- visual-c++ - Visual C++ LNK2005 错误:已在 filename.obj 中定义变量名(使用 SFML)
- oracle - 合并oracle中的数据,没有重复的GRN行
- angular - Angular 7:Formvalidation,Validators.pattern 不起作用
- java - 如何访问偏好布局内的视图,Android
- daml - 从 Java 或 JavaScript 以外的语言使用 DAML Ledger API
- javascript - 拖拽上传
- swift - Swift 包构建错误:无法构建 Objective-C 模块“Darwin”