读取部分 Parquet 文件

Read Partial Parquet file

我有一个 Parquet 文件,我不想将整个文件读入内存。我想读取元数据,然后按需读取文件的其余部分。也就是说,例如,我想阅读第三行组中第一列的第二页。我将如何使用 Apache Parquet cpp 库来做到这一点?我有我想从元数据中读取的部分的偏移量,可以直接从磁盘读取它。有什么方法可以将该缓冲区传递给 Apache Parquet 库以解压缩、解码和迭代这些值?对于列块或行组来说,同样的事情怎么样?基本上,我想部分读取文件,然后将其传递给 parquet APIs 来处理它,而不是将文件处理程序交给 API 并让它通过文件。可能吗?

在幕后,这就是 Apache Parquet C++ 库实际执行的操作。当你传入一个文件句柄时,它只会读取它需要的部分。因为它需要文件页脚(主要元数据)来知道在哪里可以找到数据段,所以这将始终被读取。只有在您请求时才会读取数据段。

无需为此编写特殊代码,库中已经内置了它。因此,如果您想详细了解它是如何工作的,您只需要阅读库的源代码:https://github.com/apache/arrow/tree/master/cpp/src/parquet