繁体   English   中英

Dataflow 适用于 directrunner 但不适用于 dataflowrunner(PubSub 到 GCS)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM