从 Dataflow 中的 GCS 读取时如何获取正在处理的文件名?
Posted
技术标签:
【中文标题】从 Dataflow 中的 GCS 读取时如何获取正在处理的文件名?【英文标题】:How to get the filename being processed when reading from GCS in Dataflow? 【发布时间】:2017-12-31 17:54:21 【问题描述】:在从 GCS 读取时,是否有办法获取正在处理的文件名:
p.apply("从 GCS 读取", TextIO.read().from("gs://path/*")).
我需要下一个 ParDo 中的文件名,以便将输出存储到相应的表中。
这个问题类似于How to Get Filename when using file pattern match in google-cloud-dataflow,但上次更新是一年多以前,所以想知道是否有新功能可以实现这一点。
【问题讨论】:
【参考方案1】:TextIO
本身无法做到这一点,但 Beam 2.2 包含的转换允许您在读取文件时执行几乎任何您想要的自定义操作,使用 FileIO.match()
、FileIO.readMatches()
。见this answer。您需要使用 DoFn<ReadableFile, String>
来使用常规 Java 工具解析文本文件(如该答案所示),还需要使用 ReadableFile
的 getMetadata()
来获取文件名。
【讨论】:
以上是关于从 Dataflow 中的 GCS 读取时如何获取正在处理的文件名?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Dataflow 管道 (python) 将多个 Json zip 文件从 GCS 加载到 BigQuery
尝试在 Dataflow 中使用 Apache Beam 将数据从 Google PubSub 写入 GCS 时出错
优化 BigQuery 资源的使用,使用 Google Dataflow 从 GCS 加载 200 万个 JSON 文件
如何从 Dataflow 中的 PCollection 读取 bigQuery