Чтение одного значения из массива в файле паркета - PullRequest
0 голосов
/ 03 апреля 2019

моя схема avro содержит очень большой массив целых чисел (например, миллионы целых чисел). Почти во всех моих сценариях мне нужно только одно значение из него.

Я пытаюсь выяснить, есть лиэто способ достичь этого, не считывая весь массив в память.например, я хотел бы только получить значение счетчиков [73289].

пожалуйста, предположите, что это моя схема avro:

    {
      "type" : "record",
      "name" : "myRecord",
      "namespace" : "org.meirlo.example",
      "fields" : [ {
        "name" : "counters",
        "type" : {
          "type" : "array",
          "items" : "int",
          "java-class" : "[I"
        }
      } ]
    }

Я могу изменить схему, но имейте в видучто размер массива в разных записях различен.

Для справки, вот код, который я использую для чтения всего файла

    try (ParquetReader<MyRecord> reader = AvroParquetReader.        
    <MyRecord>builder(new LocalInputFile(dataFile))
                    .withDataModel(new ReflectData(MyRecord.class.getClassLoader()))
                    .disableCompatibility()
                    .withConf(new Configuration())
                    .build()) {

                MyRecord record;
                while ((record = reader.read()) != null) {
                    System.out.println(record);
                }
       } 

Это вообще возможно сделатьв авро / паркете?

...