Google cloud dataflow 访问文件名中的信息(元数据)&;在梁管道中键入
我的文件名包含我在管道中需要的信息,例如,我的数据点的标识符是文件名的一部分,而不是数据中的字段。e、 g每台风力涡轮机生成一个文件turbine-loc-001-007.csv。e、 g和我需要管道中的loc数据。Java(sdk 2.9.0): Beams TextIO阅读器不允许访问文件名本身,对于这些用例,我们需要使用FileIO来匹配文件,并获得对文件名中存储的信息的访问。与TextIO不同,用户需要在FileIO读取的下游处理文件的读取。FileIO读取的结果是PCollection ReadableFile类包含文件名作为元数据,可以与文件内容一起使用 FileIO有一个方便的方法readFullyAsUTF8String(),它将整个文件读入一个String对象,这将首先将整个文件读入内存。如果内存是一个问题,那么您可以使用诸如文件系统之类的实用程序类直接处理该文件 发件人:Google cloud dataflow 访问文件名中的信息(元数据)&;在梁管道中键入,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我的文件名包含我在管道中需要的信息,例如,我的数据点的标识符是文件名的一部分,而不是数据中的字段。e、 g每台风力涡轮机生成一个文件turbine-loc-001-007.csv。e、 g和我需要管道中的loc数据。Java(sdk 2.9.0): Beams TextIO阅读器不允许访问文件名本身,对于这些用例,我们需要使用FileIO来匹配文件,并获得对文件名中存储的信息的访问。与TextIO不同,用户需要在FileIO读取的下游处理文件的读取。FileIO读取的结果是PCollection
PCollection<KV<String, String>> filesAndContents = p
.apply(FileIO.match().filepattern("hdfs://path/to/*.gz"))
// withCompression can be omitted - by default compression is detected from the filename.
.apply(FileIO.readMatches().withCompression(GZIP))
.apply(MapElements
// uses imports from TypeDescriptors
.into(KVs(strings(), strings()))
.via((ReadableFile f) -> KV.of(
f.getMetadata().resourceId().toString(), f.readFullyAsUTF8String())));
import apache_beam as beam
from apache_beam.io import fileio
with beam.Pipeline() as p:
readable_files = (p
| fileio.MatchFiles(‘hdfs://path/to/*.txt’)
| fileio.ReadMatches()
| beam.Reshuffle())
files_and_contents = (readable_files
| beam.Map(lambda x: (x.metadata.path,
x.read_utf8()))