我正在创建和上传拼花文件到AWS S3使用awswrangler。问题在于它自动生成模式,而且由于某些字段可以以不同的格式(有时是字符串,有时是数字)出现,所以在试图读取文件时会遇到问题。
我想要定义一个自定义架构。从awswrangler文档中,我看到可以将dtype作为参数传递。但上面说这是给雅典娜/格鲁的。我需要知道这个参数是否也意味着我正在传递拼花文件的模式,因为我不能在本地测试它(很困难的情况,说来话长)
发布于 2022-08-02 08:53:29
据我所知,您希望使用使用自定义拼花模式的pandas.DataFrame方法转储awswrangler.s3.to_parquet,这样模式就不会从pandas.DataFrame类型中推断出来。
Awswrangler允许使用参数dtype来实现这一点,即使文档仅仅提到它是为了创建基于拼花文件的雅典娜表。在幕后,Awswrangler执行一系列函数调用,最后调用def athena2pandas(dtype: str),在使用pyarrow.parquet.ParquetWriter编写最终的拼图文件之前,该函数会将您的dtype: Dict[str, str]转换为兼容的Pyarrow类型。
这意味着您必须使用函数声明中出现的类型(字符串格式)(这些类型是AThena列类型):"tinyint“、"smallint”、"int“、”int“、"bigint”、"float“、"real”、"double“、”布尔“、" string”、"char“、"varchar”、“时间戳”、“带时区的时间戳”、"datetime64“、”日期“、”十进制“、”二进制“、”变量“。
import awswrangler as wr
import pandas as pd
import pyarrow as pa
// create an example pandas.DataFrame
df = pd.DataFrame.from_dict({"int_col": [1, 2, 3], "bool_col": [True, False, True], "str_col": ["foo", "bar", "baz"]})
// write paruqte file to S3 using dtype parameter to declare specific column types
wr.s3.to_parquet(df, "s3://YOUR_BUCKEY/FILE_KEY", dtype={"int_col": "int", "bool_col": "boolean", "str_col": "string"})注意:不能使用Pyarrow.Schema传递客户pyarrow_additional_kwargs
资源:
https://stackoverflow.com/questions/71229059
复制相似问题