[英]Apache beam dataframe write csv to GCS without shard name template
我有一个使用 Apache Beam dataframe 的数据流管道,我想将 csv 写入 GCS 存储桶。 这是我的代码:
with beam.Pipeline(options=pipeline_options) as p:
df = p | read_csv(known_args.input)
df[column] = df.groupby(primary_key)[column].apply(lambda x: x.ffill().bfill()))
df.to_csv(known_args.output, index=False, encoding='utf-8')
但是,当我将 gcs 路径传递给known_args.output
时,在 gcs 上写入的 csv 会添加分片,例如gs://path/to/file-00000-of-00001
。 对于我的项目,我需要文件名没有分片。 我已阅读文档,但似乎没有删除碎片的选项。 我尝试将 df 转换回 pcollection 并使用WriteToText
但它也不起作用,也不是一个理想的解决方案。
看起来你是对的; 在 Beam 2.40 中,无法自定义这些 dataframe 写入操作的分片。 相反,您必须使用转换为 PCollection 并使用WriteToText(..., shard_name_template='')
我提交了BEAM-22923 。 当相关的PR被合并时,这个固定将允许传递一个明确的文件命名参数(这将允许自定义这个以及窗口信息),例如
df.to_csv(
output_dir,
num_shards=1,
file_naming=fileio.single_file_naming('out.csv'))
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.