用于窗口聚合和自定义触发的Apache Spark结构化流

时间:2019-06-21 17:56:39

标签: apache-spark spark-structured-streaming

说我有一些模式的流数据,如下:

<div className="card-body"
     dangerouslySetInnerHTML={ { __html: this.props.tasks.join('') } }>
</div>

现在假设数据已被uid: string ts: timestamp 进行了分区(在每个分区中,数据都是最小的,例如小于1行/秒)。

我想根据事件时间uid将数据(在每个分区中)放入窗口,然后对每个窗口中的所有元素进行排序(也基于ts),最后应用在窗口中的每个元素上按顺序进行自定义转换。

Q1:有什么方法可以获取窗口的汇总视图,但可以保留每个元素,例如将窗口中的所有元素具体化为列表?

Q2:如果可能使用Q1,我想设置一个水印和触发器组合,该组合在窗口末尾触发一次,然后周期性地触发或在每次迟到数据到达时触发。有可能吗?

1 个答案:

答案 0 :(得分:0)

在我回答问题之前,我要指出,Spark结构化流提供KeyValueGroupedDataset.flatMapGroupsWithState(在Dataset.groupByKey之后)用于任意状态流聚合(具有显式状态逻辑),从而为手动流提供最大的收益状态管理。


  

Q1:有什么方法可以获取窗口的汇总视图,但可以保留每个元素,例如将窗口中的所有元素具体化为列表?

这听起来像是流连接,其中输入流在左侧,聚合流(流聚合)在右侧。那应该是可行的(但不要留下任何示例代码,因为我仍然不确定我是否理解您的问题对。)

  

Q2:如果可能使用Q1,我想设置一个水印和触发器组合,该组合在窗口末尾触发一次,然后周期性地触发或在每次迟到数据到达时触发。有可能吗?

使用window标准函数定义窗口,并使用水印在适当的时候“关闭”窗口。这也是可行的(但由于我不确定该问题的优点,因此再也没有示例)。