我有一个流媒体管道连接到pub / sub,它发布了GCS文件的文件名。从那里我想阅读每个文件并解析每一行上的事件(事件是我最终想要处理的事件)。
我可以使用TextIO吗?当在执行期间定义文件名时,可以在流管道中使用它(与使用TextIO作为源并且构造中已知fileName(s)相反)。如果不是,我想要做以下事情:
从pub / sub获取主题 ParDo读取每个文件并获取行 处理文件的行......
我可以使用FileBasedReader或类似的东西来读取文件吗?文件不是太大,所以我不需要并行读取单个文件,但我需要读取大量文件。
答案 0 :(得分:4)
您可以使用TextIO.readAll()
转换,该转换最近已添加到#3443中的Beam中。例如:
PCollection<String> filenames = p.apply(PubsubIO.readStrings()...);
PCollection<String> lines = filenames.apply(TextIO.readAll());
这将读取到达pubsub的每个文件中的所有行。