首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在从PyArrow写入Parquet文件时指定逻辑类型?

如何在从PyArrow写入Parquet文件时指定逻辑类型?
EN

Stack Overflow用户
提问于 2018-03-08 11:51:19
回答 1查看 2.6K关注 0票数 3

我使用PyArrow[消]拼花中的一些熊猫数据中编写熊猫文件。

有什么方法可以指定写入到拼花文件中的逻辑类型吗?

例如,在np.uint32中写入PyArrow列会导致拼花文件中的INT64列,而使用紧固件模块编写该列则会生成逻辑类型为UINT_32的INT32列(这就是我从PyArrow开始的行为)。

例如:

代码语言:javascript
复制
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
import fastparquet as fp
import numpy as np

df = pd.DataFrame.from_records(data=[(1, 'foo'), (2, 'bar')], columns=['id', 'name'])
df['id'] = df['id'].astype(np.uint32)

# write parquet file using PyArrow
pq.write_table(pa.Table.from_pandas(df, preserve_index=False), 'pyarrow.parquet')

# write parquet file using fastparquet
fp.write('fastparquet.parquet', df)

# print schemas of both written files
print('PyArrow:', pq.ParquetFile('pyarrow.parquet').schema)
print('fastparquet:', pq.ParquetFile('fastparquet.parquet').schema)

这一产出如下:

代码语言:javascript
复制
PyArrow: <pyarrow._parquet.ParquetSchema object at 0x10ecf9048>
id: INT64
name: BYTE_ARRAY UTF8

fastparquet: <pyarrow._parquet.ParquetSchema object at 0x10f322848>
id: INT32 UINT_32
name: BYTE_ARRAY UTF8

我和其他列类型也有类似的问题,所以真的在寻找一种通用的方法来指定在使用PyArrow编写时使用的逻辑类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-08 16:48:58

默认情况下,PyArrow默认编写ParqueVersion1.0文件,使用UINT_32逻辑类型需要2.0版本。

解决方案是在编写表时指定版本,即

代码语言:javascript
复制
pq.write_table(pa.Table.from_pandas(df, preserve_index=False), 'pyarrow.parquet', version='2.0')

这将导致编写预期的拼花模式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49172428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档