使用parquet-mr@1.11.0
,我有一个架构,例如:
schema message page {
required binary url (STRING);
optional binary content (STRING);
}
url
进行单行查找,以检索关联的content
url
排序。该文件是通过以下方式创建的:
使用parquet-tools
,我可以验证自己确实具有列索引和/或列偏移量:
column index for column url:
Boudary order: ASCENDING
null count min max
page-0 0 http://materiais.(...)delos-de-curriculo https://api.quero(...)954874/toogle_like
page-1 0 https://api.quero(...)880/toogle_dislike https://api.quero(...)ior-online/encceja
page-2 0 https://api.quero(...)erior-online/todos https://api.quero(...)nte-em-saude/todos
offset index for column url:
offset compressed size first row index
page-0 4 224274 0
page-1 224278 100168 20000
page-2 324446 67778 40000
column index for column content:
NONE
offset index for column content:
offset compressed size first row index
page-0 392224 504412 0
page-1 896636 784246 125
page-2 1680882 641212 200
page-3 2322094 684826 275
[... truncated ...]
page-596 256651848 183162 53100
使用配置为:的阅读器
AvroParquetReader
.<GenericRecord>builder(HadoopInputFile.fromPath(path, conf))
.withFilter(FilterCompat.get(
FilterApi.eq(
FilterApi.binaryColumn(urlKey),
Binary.fromString(url)
)
))
.withConf(conf)
.build();
感谢column-index
和column-offsets
,我希望读者只能阅读2页:
url
个与min/max
匹配的列索引。content
的匹配行索引。但是我看到的是读者正在为content
列读取和解码数百页(〜250MB),我是否缺少有关PageIndex应该如何在parquet-mr中工作的东西?
查找“正在加载页面”和“跳过记录”日志行,这是在将过滤器应用于url
之前试图建立整个记录,我认为这违反了PageIndex的目的。
我试图上网寻找读者的工作方式,但找不到任何东西。
修改
我在parquet-column
上发现了从2015年开始的PR,暗示当前的读者(至少在当时)确实在使用谓词之前使用所有必需的列来构建整个记录:
https://github.com/apache/parquet-mr/pull/288
但是在这种情况下,我看不到column offsets
的目的。
答案 0 :(得分:1)
发现,即使这不是我期望阅读的the specs,它仍然可以正常工作。
在this issue中,我引用:
列URL有3页。您的过滤器发现第0页匹配。基于偏移量索引,它将转换为行范围[0..19999]。因此,我们需要为页面网址加载page-0,并且所有页面的行内容都在[0..19999]行范围内。