我的avro方案包含非常大的整数数组(例如数百万个整数), 在几乎所有情况下,我都只需要一个值即可。
我试图找出是否有一种方法可以将整个数组读入内存。 例如,我只想获取counters [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);
}
}
甚至可以在avro /镶木地板中做吗?