pyarrow 写入数据集会删除分区列

问题描述 投票:0回答:1

我正在尝试使用

pyarrow
分区并写入
parquet
文件

!pip install pyarrow==13.0.0

import pyarrow as pa
table = pa.table({'year': [2020, 2022, 2021, 2022, 2019, 2021],
              'n_legs': [2, 2, 4, 4, 5, 100],
              'animal': ["Flamingo", "Parrot", "Dog", "Horse",
                         "Brittle stars", "Centipede"]})

import pyarrow.parquet as pq
pq.write_to_dataset(table, root_path='dataset_name_3',
                partition_cols=['year'])
p_files = pq.ParquetDataset('dataset_name_3', use_legacy_dataset=False).files

import pandas as pd
pd.read_parquet(path=p_files[0])

操作:

   n_legs   animal
0   5      Brittle stars

如OP所示,读完

partition_files
后,Op中只有2列 -
n_legs
animal
。我用
year
创建分区的列被删除。

有什么建议可以解决这个问题吗?

pandas parquet pyarrow apache-arrow
1个回答
0
投票

您将表保存为分区数据集,但读取单个 parquet 文件。单个 parquet 文件只是数据集的一部分,因此不包含所有数据。但数据仍然存在,作为分区目录的名称:

ls dataset_name_3                                                                 
'year=2019'  'year=2020'  'year=2021'  'year=2022'

如果您按预期使用该函数,而不仅仅是获取文件名,数据就在那里:

>>> ds = pq.ParquetDataset('dataset_name_3')
>>> ds.read().to_pandas()
   n_legs         animal  year
0       5  Brittle stars  2019
1       2       Flamingo  2020
2       4            Dog  2021
3     100      Centipede  2021
4       2         Parrot  2022
5       4          Horse  2022

有关详细信息和示例,请参阅 ParquetDataset 或更通用的 dataset 的文档。

© www.soinside.com 2019 - 2024. All rights reserved.