在Python中的数据流中写入动态目标到云存储

时间:2018-02-15 17:04:07

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

我试图从云存储中的大文件中读取并根据给定字段对它们进行分片。

我打算阅读| Map(lambda x:(x [key field],x))| GroupByKey |使用关键字段的名称写入文件。

但是,我无法找到一种动态写入云存储的方法。是否支持此功能?

谢谢你, 一清

2 个答案:

答案 0 :(得分:1)

是的,您可以使用FileSystems API创建文件。

答案 1 :(得分:0)

在2.14.0 beam.io.fileio.WriteToFiles的Beam python SDK中添加了实验性写法:

my_pcollection | beam.io.fileio.WriteToFiles(
      path='/my/file/path',
      destination=lambda record: 'avro' if record['type'] == 'A' else 'csv',
      sink=lambda dest: AvroSink() if dest == 'avro' else CsvSink(),
      file_naming=beam.io.fileio.destination_prefix_naming())

可用于每条记录写入不同的文件。

您可以跳过GroupByKey,只需使用destination来确定每条记录写入哪个文件。 destination的返回值必须是可以分组的值。

更多文档在这里:

would be to use a Personal Access Token

此处还有JIRA问题:

https://beam.apache.org/releases/pydoc/2.14.0/apache_beam.io.fileio.html#dynamic-destinations