AWS Redshift Spectrum 不适用于 apache parquet 文件

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

以下是我的示例 csv 文件。

id,name,gender
1,isuru,male
2,perera,male
3,kasun,male
4,ann,female

我使用 pandas 库将上面的 csv 文件转换为 apache parquet。以下是我的代码。

import pandas as pd
    
df = pd.read_csv('./data/students.csv')
df.to_parquet('students.parquet')

之后,我将 parquet 文件上传到 s3 并创建了一个外部表,如下所示。

create external table imp.s1 (
id integer,
name varchar(255),
gender varchar(255)
)
stored as PARQUET 
location 's3://sample/students/';

之后我只是运行选择查询,但出现以下错误。

select * from imp.s1

Spectrum Scan Error. File 'https://s3.ap-southeast-2.amazonaws.com/sample/students/students.parquet' 
has an incompatible Parquet schema for column 's3://sample/students.id'. 
Column type: INT, Parquet schema:\noptional int64 id [i:0 d:1 r:0] 
(s3://sample/students.parquet)

您能帮我弄清楚这里出了什么问题吗?

python pandas amazon-web-services dataframe amazon-redshift
1个回答
2
投票

对于可为 NULL 的整数值,Pandas 使用与 Parquet Amazon S3 中的 Bigint 对应的数据类型 Int64。

Parquet Amazon S3 文件数据类型 转型 描述
Int32 整数 -2,147,483,648 至 2,147,483,647(精度为 10,小数位数为 0)
Int64 Bigint -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807(精度为 19,小数位数为 0)

调用

id
 时需要显式设置 
pandas.read_csv
的列类型。

df = pd.read_csv('./data/students.csv', dtype={'id': 'int32'})
© www.soinside.com 2019 - 2024. All rights reserved.