我有一个Parquet文件,并且我不想将整个文件读入内存。我想读取元数据,然后按需读取文件的其余部分。也就是说,例如,我想阅读第三行组中第一列的第二页。如何使用Apache Parquet cpp库做到这一点?我有要从元数据读取的部分的偏移量,可以直接从磁盘读取它。有什么方法可以将该缓冲区传递给Apache Parquet库,以对值进行解压缩,解码和迭代吗?列块或行组的同一件事如何?基本上,我想部分读取文件,然后将其传递给镶木地板API进行处理,这与将文件处理程序交给API并使其通过文件相反。有可能吗?
答案 0 :(得分:1)
这是Apache Parquet C ++库实际执行的操作。传递文件句柄时,它将仅读取所需的部分。由于它需要文件页脚(主要元数据)知道从何处查找数据段,因此将始终读取该页脚。数据段仅在您请求时才会读取。
无需为此编写特殊代码,该库已经内置了它。因此,如果您想详细了解它是如何工作的,则只需阅读该库的源代码:https://github.com/apache/arrow/tree/master/cpp/src/parquet