我正在编写代码来转换我作为行的大型拼花地板文件:
List<org.apache.parquet.example.data.simple.SimpleGroup>
到小的单行实木复合地板文件,每个文件都需要一个org.apache.avro.generic.GenericData.Record。
构建单行文件时,我正在执行以下操作:
for (int a = 0; a < parquet.getData().size(); a++) {
// one row of input data
SimpleGroup simpleGroup = parquet.getData().get(a);
String aaa = simpleGroup.getString("aaa", 0);
String bbb = simpleGroup.getString("bbb", 0);
String ccc = simpleGroup.getString("ccc", 0);
// output record
GenericData.Record record = new GenericData.Record(avroSchema);
record.put("aaa", aaa);
record.put("bbb", bbb);
record.put("ccc", ccc);
// covert record using schema
byte[] bytes = recordInjection.apply(record);
data.add(bytes);
}
虽然我仅显示三列,但有许多列。看来我应该能够以某种方式致电:
byte[] bytes = recordInjection.apply(record);
在simpleGroup上还是整洁地遍历了simpleGroup的所有行,从而构建了GenericData.Record,但我不知道如何实现。
有人知道吗?
谢谢
最佳答案
我发现的答案是,我可以遍历架构中的字段:
for (Schema.Field field :avroSchema.getFields()) {
String name = field.name();
record.put(name, simpleGroup.getString(name, 0));
}