尽管有这个问题,但在数据集API中似乎没有窗口化,但我想知道为什么会这样,因为从概念上讲,能够处理有边界的源并仍然具有窗口操作似乎是有意义的。
我错了吗?有可能在DataSet
、UnsortedGrouping
或类似的东西上有窗口吗?
如果不是,我想一个替代方案是使用Beam。
数据集API不提供用于窗口化的内置运算符。主要原因是它早于DataStream API,并且最初并不是为此类用例设计的。然而,它提供了实现自定义窗口逻辑的所有构建块。
还有表API/SQL,它是用于批处理和流处理的统一API。在内部,表API和SQL查询被转换为数据流和数据集作业。对于批处理查询,窗口操作被转换为自定义窗口实现(如前所述(,主要基于reduceGroup
、sortPartition
和mapPartition
。但是,并不是所有的窗口类型都支持批处理查询。
ApacheBeam还统一了批处理和流处理,这可能也是一个可行的选择。