【问题标题】:using parquet files statistics without reading the files在不读取文件的情况下使用 parquet 文件统计信息
【发布时间】: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

【问题讨论】:

    标签: python parquet dask pyarrow fastparquet


    【解决方案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]}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2017-02-23
      • 2014-02-02
      • 2011-12-02
      • 2019-10-12
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多