我正在尝试使用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;
}
}));