说我有一些模式的流数据,如下:
<div className="card-body"
dangerouslySetInnerHTML={ { __html: this.props.tasks.join('') } }>
</div>
现在假设数据已被uid: string
ts: timestamp
进行了分区(在每个分区中,数据都是最小的,例如小于1行/秒)。
我想根据事件时间uid
将数据(在每个分区中)放入窗口,然后对每个窗口中的所有元素进行排序(也基于ts
),最后应用在窗口中的每个元素上按顺序进行自定义转换。
Q1:有什么方法可以获取窗口的汇总视图,但可以保留每个元素,例如将窗口中的所有元素具体化为列表?
Q2:如果可能使用Q1,我想设置一个水印和触发器组合,该组合在窗口末尾触发一次,然后周期性地触发或在每次迟到数据到达时触发。有可能吗?
答案 0 :(得分:0)
在我回答问题之前,我要指出,Spark结构化流提供KeyValueGroupedDataset.flatMapGroupsWithState
(在Dataset.groupByKey
之后)用于任意状态流聚合(具有显式状态逻辑),从而为手动流提供最大的收益状态管理。
Q1:有什么方法可以获取窗口的汇总视图,但可以保留每个元素,例如将窗口中的所有元素具体化为列表?
这听起来像是流连接,其中输入流在左侧,聚合流(流聚合)在右侧。那应该是可行的(但不要留下任何示例代码,因为我仍然不确定我是否理解您的问题对。)
Q2:如果可能使用Q1,我想设置一个水印和触发器组合,该组合在窗口末尾触发一次,然后周期性地触发或在每次迟到数据到达时触发。有可能吗?
使用window
标准函数定义窗口,并使用水印在适当的时候“关闭”窗口。这也是可行的(但由于我不确定该问题的优点,因此再也没有示例)。