![](/img/trans.png)
[英]Google Cloud Dataflow - Python Streaming JSON to PubSub - Differences between DirectRunner and DataflowRunner
[英]Dataflow works with directrunner but not with dataflowrunner (PubSub to GCS)
我正在用数据流做一个非常简单的管道。
它从 pubsub 获取原始数据并添加时间戳,然后写入原始文件(我首先尝试了镶木地板)。
代码:
class GetTimestampFn(beam.DoFn):
"""Prints element timestamp"""
def process(self, element, timestamp=beam.DoFn.TimestampParam):
timestamp_utc = float(timestamp)
yield {'raw':str(element),"inserted_at":timestamp_utc}
options = PipelineOptions(streaming=True)
p = beam.Pipeline(DirectRunner(), options=options)
parser = argparse.ArgumentParser()
parser.add_argument('--input_topic',required=True)
parser.add_argument('--output_parquet',required=True)
known_args, _ = parser.parse_known_args(argv)
raw_data = p | 'Read' >> beam.io.ReadFromPubSub(subscription=known_args.input_topic)
raw_with_timestamp = raw_data | 'Getting Timestamp' >> beam.ParDo(GetTimestampFn())
_ = raw_with_timestamp | 'Write' >> beam.io.textio.WriteToText(known_args.output_parquet,append_trailing_newlines=True
,file_name_suffix='.gzip'
)
p.run().wait_until_finish()
它适用于直接运行器,但在 dataflowrunner 上失败并显示此消息“工作流失败”。
职位编号:2021-04-14_17_11_02-16453427249129279174
我如何运行这项工作:
python real_time_events.py \
--region us-central1 \
--input_topic 'projects/{project}/subscriptions/{subscription}' \
--output_parquet 'gs://{bucket}/stream/' \
--project "{project}" \
--temp_location "gs://{bucket}/tmp" \
--staging_location "gs://{bucket}/stage"
关于如何解决的任何想法?
WriteToText
不支持流式传输管道。 我建议您尝试改用fileio.WriteToFiles
来获得支持流式传输的转换。 请注意,您可能需要在它之前进行分组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.