Parquet创建从pandas数据帧转换为pyarrow表不适用于对象dtype

时间:2017-04-07 02:54:42

标签: pandas hive parquet

我想从csv文件创建一个镶木地板文件。出于测试目的,我在下面的代码片段中读取文件并首先将其转换为pandas数据帧然后再转换为pyarrow表。然后,此表存储在AWS S3上,并希望在表上运行配置单元查询。

输入文件内容:

['none']

代码:

YEAR|WORD
2017|Word 1
2018|Word 2

写入pyarrow表后,我查询了镶木地板文件,以确保数据存储在S3中。但结果很奇怪:

dataFrame=pd.read_csv(inputFile, sep='|')
print(dataFrame)
print(dataFrame.dtypes)
print(dataFrame.columns)
dataFrame['C1'] = dataFrame['C1'].astype('str')
print(dataFrame.dtypes)
table=pa.Table.from_pandas(dataFrame)#,schema=pa.string())
pq.write_table(table, outputFile)

不知何故,int值显示正常,但是object / str值没有被转换得很好。

感谢你的帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

这复制了我的往返罚款。请指定您的平台&版本pythonpandaspyarrow

On 3.6 / macox(也在2.7上工作)

In [1]: import pandas as pd

In [2]: import pyarrow as pa

In [3]: pd.__version__
Out[3]: '0.19.2'

In [4]: pa.__version__
Out[4]: '0.2.0'

In [5]: data = """YEAR|WORD
   ...: 2017|Word 1
   ...: 2018|Word 2
   ...: """

In [6]: df = pd.read_csv(StringIO(data), sep='|')

In [7]: df
Out[7]: 
   YEAR    WORD
0  2017  Word 1
1  2018  Word 2

In [8]: df.dtypes
Out[8]: 
YEAR     int64
WORD    object
dtype: object

In [9]: table=pa.Table.from_pandas(df)

In [10]: import pyarrow.parquet as pq

In [12]: pq.write_table(table, 'foo.pk')

In [13]: pq.read_table('foo.pk').to_pandas()
Out[13]: 
   YEAR    WORD
0  2017  Word 1
1  2018  Word 2

In [14]: pq.read_table('foo.pk').to_pandas().dtypes
Out[14]: 
YEAR     int64
WORD    object
dtype: object