Google cloud platform 如何读取文本文件并使用TextIO返回额外的输入字段?
我有一个KV的PCollection,其中key是filename,value是文件的一些附加信息(例如,生成文件的“源”系统)。例如: 我需要从文件中读取所有行,并使用“Source”字段,作为KV PCollection返回Google cloud platform 如何读取文本文件并使用TextIO返回额外的输入字段?,google-cloud-platform,google-cloud-dataflow,apache-beam,dataflow,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Dataflow,我有一个KV的PCollection,其中key是filename,value是文件的一些附加信息(例如,生成文件的“源”系统)。例如: 我需要从文件中读取所有行,并使用“Source”字段,作为KV PCollection返回 KV(line1 from X1.dat, "SourceX") KV(line2 from X1.dat, "SourceX") ... KV(line1 from Y1.dat, "SourceY") 我可以通过调用FileIO.match()并后跟一个DoFn来
KV(line1 from X1.dat, "SourceX")
KV(line2 from X1.dat, "SourceX")
...
KV(line1 from Y1.dat, "SourceY")
我可以通过调用FileIO.match()并后跟一个DoFn来实现这一点,在DoFn中,我依次读取文件并附加SourceX(从SideInput中传递的映射中检索)
为了获得并行阅读的好处,我可以使用TextIO.readAll()来实现这一点吗?read()返回一个没有文件名信息的PCollection。我如何将它连接回文件名到源映射的映射?已尝试使用密钥传输,但无法工作…如果我理解正确,是否要并行读取该文件?不幸的是,
TextIO.readAll
没有此功能。您必须使用FileIO.match
,然后编写DoFn
以所需的自定义方式读取文件
这是因为您将无法对文件进行随机搜索并保留行号计数
连续读取文件是否是管道的瓶颈?当前使用的
FileIO.match()
是实现这一点的最佳方法,但一旦合并,您就可以使用新的上下文文本转换
注意,以分布式方式计算行号本身就很昂贵;您可能想看看是否可以使用偏移量(计算起来要复杂得多,排序与行号相同)
KV(line1 from X1.dat, "SourceX")
KV(line2 from X1.dat, "SourceX")
...
KV(line1 from Y1.dat, "SourceY")