从 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 读取时如何获取正在处理的文件名?的主要内容,如果未能解决你的问题,请参考以下文章