繁体   English   中英

Apache 光束 dataframe 将 csv 写入没有分片名称模板的 GCS

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

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