在Apache Beam中,面板和窗口是两个不同的概念。窗口定义了数据流的分割方式,而面板则是用于处理并行数据的基本单位。
简而言之,窗口定义了数据流的边界,而面板则是用于处理窗口内数据的小块。
以下是一个示例代码,演示Apache Beam中的窗口和面板的使用:
import apache_beam as beam
class PrintFn(beam.DoFn):
def process(self, elem, window=beam.DoFn.WindowParam):
print('element:', elem, 'window:', window)
yield elem
with beam.Pipeline() as p:
data = p | beam.Create([1, 2, 3, 4, 5]) \
| beam.WindowInto(beam.window.FixedWindows(2))
data | beam.ParDo(PrintFn())
在此示例中,数据流被分为大小为2的窗口,然后在每个窗口内并行处理数据。PrintFn类的process方法用于打印窗口和元素的信息。在最后的输出中,我们可以看到元素和窗口的信息是按窗口划分的。