【问题标题】:Read Partial Parquet file读取部分 Parquet 文件
【发布时间】:2019-05-01 06:10:53
【问题描述】:

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

【问题讨论】:

  • 是的,可以通过编写代码来实现。请提供您的方法,我们可以帮助您。这不是免费的编码服务。
  • 我知道可以通过写代码来实现!我想知道图书馆是否已经支持这个。

标签: c++ apache buffer parquet partial


【解决方案1】:

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

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

【讨论】:

  • 即使库不读取整个文件,它也需要将文件传递给它。我需要的是只传递文件的一部分(内存缓冲区),因为我无权访问完整的镶木地板文件。有没有办法将文件的一部分(不是文件句柄)传递给库?
  • 感谢您的回复,现在我明白了您的意思并找到了代码的位置。
  • 酷!只是为了向更多读者澄清这一点:当您只有文件的一部分但有可以请求剩余数据的代码时,您可以自己实现 File API,然后在 Parquet 库要求时检索剩余数据。
猜你喜欢
  • 2018-10-04
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2020-10-28
  • 2021-03-07
  • 1970-01-01
  • 2020-11-10
相关资源
最近更新 更多