моя схема 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);
}
}
Это вообще возможно сделатьв авро / паркете?