Beam Pipeline(PY)输出未写入本地磁盘

时间:2019-01-02 18:21:54

标签: python-2.7 google-cloud-dataflow apache-beam

我正在Apache中学习Windowing&Triggering概念,目的是:

  • 读取无限来源(PubSub)
  • 每隔 5秒FIXED Window间隔
  • 将传入消息写入本地磁盘

问题:没有输出写入本地磁盘(管道确实创建了一个 beam-team-文件夹并在其中写入了一些文件,但原本没有 output.csv 目的地每5秒写入一次。)

  • 运行apache-beam == 2.9.0,Python 2.7.10
  • 尝试了两种: DirectRunner DataFlowRunner (以GCS Bucket为目标)

下面是代码(非常感谢您的任何建议):

p = beam.Pipeline(runner=None, options=options, argv=None)

"""
#1) Read incoming messages & apply Windowing
"""
lines = p | "read_sub" >> beam.io.gcp.pubsub.ReadFromPubSub(topic=None, subscription=SUBSCRIBER, with_attributes=True) \


"""
#2) Apply 5 sec Windowing
"""
          | 'window' >> beam.WindowInto(beam.window.FixedWindows(5))


"""
#3) apply Map() ops
"""
output = lines | "pardo" >> beam.Map(lambda x: x.data)


"""
#4) write out to localhost disk
"""

output | beam.io.WriteToText('output', file_name_suffix='.csv', header='time, colname1, colname2')

p.run().wait_until_finish()

非常感谢您的任何建议!

干杯!

1 个答案:

答案 0 :(得分:0)

您正在从无限制的源中读取并试图写入有限制的源中。虽然Beam API for Java使用withWindowedWrites方法支持它,但是Python尚不支持它,这是人们期待已久的有用功能。因此,您需要切换到Java或将其写入BigQuery。