我想从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值没有被转换得很好。
感谢你的帮助。
感谢。
答案 0 :(得分:0)
这复制了我的往返罚款。请指定您的平台&版本python
,pandas
和pyarrow
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