从 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 工具解析文本文件(如该答案所示),还需要使用 ReadableFilegetMetadata() 来获取文件名。

【讨论】:

以上是关于从 Dataflow 中的 GCS 读取时如何获取正在处理的文件名?的主要内容,如果未能解决你的问题,请参考以下文章