在不读取文件的情况下使用 parquet 文件统计信息

Posted

技术标签:

【中文标题】在不读取文件的情况下使用 parquet 文件统计信息【英文标题】:using parquet files statistics without reading the files 【发布时间】:2018-12-19 10:51:34 【问题描述】:

据我了解,镶木地板文件具有列的最小/最大统计信息。 我的问题是如何在不读取整个文件的情况下使用 python 读取这些统计信息?

如果有帮助,我还有 _common_metadata_metadata 文件。


我的具体问题是获取此文件系统中每个证券交易所分区的最大日期(每个年份分区包含多个具有日期列的 parquet 文件):

C:.
│   _common_metadata
│   _metadata
├───source=NASDAQ
│   ├───year=2017
│   └───year=2018
├───source=London_Stock_Exchange
│   ├───year=2014
│   ├───year=2015
├───source=Japan_Exchange_Group
│   ├───year=2017
│   └───year=2018
└───source=Euronext
    ├───year=2017
    └───year=2018

【问题讨论】:

【参考方案1】:

您可以在pyarrow 中按每个行组提取它们:

import pyarrow.parquet as pq

pq_file = pq.ParquetFile(…)
# Get metadata for the i-th RowGroup
rg_meta = pq_file.metadata.row_group(i)
# Get the "max" statistic for the k-th column
max_of_col = rq_meta.column(col).statistics.max

【讨论】:

pq.ParquetFile(…) 中的... 是文件路径还是目录路径?如果是文件,“i-th RowGroup”是什么意思?我认为 RowGroup 是每个文件 不,文件可以有任意数量的行组。此命令仅适用于单个文件。对于多个文件,使用ParquetDataset,然后遍历其所有ParquetDatasetPieces。 所以如果想要最大日期我应该max 每个文件的所有最大值? 是的,这将为您提供全局最大值。 如何从rg.statistics.max返回的int中获取日期【参考方案2】:

经过一些额外的搜索,我在fastparquet 模块中找到了这个sorted_partitioned_columns

它给出了每个文件的最小值和最大值!

示例:

>>> import fastparquet
>>> fastparquet.api.sorted_partitioned_columns(pf)
'id': 'min': [1, 5, 10], 'max': [4, 9, 20]

【讨论】:

以上是关于在不读取文件的情况下使用 parquet 文件统计信息的主要内容,如果未能解决你的问题,请参考以下文章

在不加载到内存的情况下将 HDF5 转换为 Parquet

如何在不实际提取文件的情况下使用 VBScript 读取 .zip 文件的内容?

如何在不使用外部库(例如 Numpy、Pandas)的情况下读取 CSV 文件?

如何在不使用临时文件的情况下从 Java 中的嵌套 zip 文件中读取数据?

在不读取整个文件的情况下获取图像尺寸

在不读取整个文件的情况下获取图像尺寸