在Apache Beam中,使用AvroIO.parseAllGenericRecords时如何访问源文件名?

时间:2019-05-08 23:01:14

标签: google-cloud-platform google-cloud-dataflow apache-beam

我正在尝试使用Apache Beam来解析Avro文件列表。作为解析的一部分,我想包括源文件的名称以及从Avro文件中解析的记录。我正在使用AvroIO.parseAllGenericRecords来执行此操作,但没有找到访问源文件名的方法。

我已经在SO中研究了类似的问题,但它们与AvroIO.parseAllGenericRecords无关。特别是关于AvroIO.parseAllGenericRecords,我需要在SerializableFunction内执行一个无法访问ProcessContext的转换,许多相关的解决方案都建议使用该转换来访问源文件名。

Pipeline p = ...;
PCollection<String> filepatterns = p.apply(...);
PCollection<Foo> records =
    filepatterns.apply(AvroIO.parseAllGenericRecords(new SerializableFunction<GenericRecord, Foo>() {
        public Foo apply(GenericRecord record) {
            Foo foo = new Foo();
            // foo.setSourceFilename(); // set source filename for the object
            foo.setField1(record.get("field1"));
            foo.setField2(record.get("field2"));
            return foo;
        }
}));

0 个答案:

没有答案