我正在编写代码来转换我作为行的大型拼花地板文件:

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));
            }

09-07 15:53