我正在尝试将Pandas数据帧写入分区文件:
df.to_parquet('output.parquet', engine='pyarrow', partition_cols = ['partone', 'partwo'])
TypeError: __cinit__() got an unexpected keyword argument 'partition_cols'
从文档中,我预计partition_cols
将作为kwargs传递给pyarrow库。如何使用熊猫将分区文件写入本地磁盘?
答案 0 :(得分:3)
首先确保您拥有最新版本的 Pandas 和 pyarrow:
pyenv shell 3.8.2
python -m venv venv
source venv/bin/activate
pip install pandas pyarrow
pip freeze | grep pandas # pandas==1.2.3
pip freeze | grep pyarrow # pyarrow==3.0.0
然后您可以使用 partition_cols
生成分区的镶木地板文件:
import pandas as pd
# example dataframe with 3 rows and columns year,month,day,value
df = pd.DataFrame(data={'year': [2020, 2020, 2021],
'month': [1,12,2],
'day': [1,31,28],
'value': [1000,2000,3000]})
df.to_parquet('./mydf', partition_cols=['year', 'month', 'day'])
这会产生:
mydf/year=2020/month=1/day=1/6f0258e6c48a48dbb56cae0494adf659.parquet
mydf/year=2020/month=12/day=31/cf8a45116d8441668c3a397b816cd5f3.parquet
mydf/year=2021/month=2/day=28/7f9ba3f37cb9417a8689290d3f5f9e6e.parquet
答案 1 :(得分:2)
熊猫DataFrame.to_parquet
是table = pa.Table.from_pandas(...)
和pq.write_table(table, ...)
的瘦包装(请参阅pandas.parquet.py#L120
),而pq.write_table
不支持写入分区数据集。您应该改用pq.write_to_dataset
。
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
df = pd.DataFrame(yourData)
table = pa.Table.from_pandas(df)
pq.write_to_dataset(
table,
root_path='output.parquet',
partition_cols=['partone', 'parttwo'],
)
有关更多信息,请参见pyarrow documentation。
通常,在读取/写入镶木地板文件时,我总是会直接使用PyArrow API,因为Pandas包装器的功能相当有限。
答案 2 :(得分:1)
您需要更新到Pandas 0.24或更高版本。从该版本开始添加partition_cols的功能。
答案 3 :(得分:0)
使用dask和fastparquet,说你想要8个分区:
import dask.dataframe as dd
_ = dd.from_pandas(df, npartitions= 8) \
.to_parquet('my_pq.parquet', engine='fastparquet')