【问题标题】:Writing a parquet file from python that is compatible for SQL/Impala从与 SQL/Impala 兼容的 python 编写镶木地板文件
【发布时间】:2023-01-20 11:48:28
【问题描述】:

我正在尝试将 pandas Dataframe 写入与 Impala 中的表兼容的镶木地板文件,但我正在努力寻找解决方案。

我的 df 有 3 列

code   int64
number float
name   object

当我将它创建到镶木地板文件中并将其加载到 impala 中时,python 模式被保留并且它失败了。我希望镶木地板使用以下模式保存:

code    int
number  decimal(36,18)
name    string

我试过这个:

env_schema = """
code    int
number  decimal(36,18)
name    string
"""
df.to_parquet(f'path', index=False, schema=env_schema)

但出现以下错误:

Argument 'schema' has incorrect type (expected pyarrow.lib.Schema, got str)

有谁知道我怎么能做到这一点?谢谢

【问题讨论】:

    标签: python apache-spark impala pyarrow


    【解决方案1】:

    像这样创建架构:

    import pyarrow as pa
    
    env_schema = pa.schema([
      ('code', pa.int32()),
      ('number', pa.decimal128(36,18)),
      ('name', pa.string())
    ])
    

    如果 pandas DataFrame 的列没有与模式匹配的数据类型,那么您需要创建一个 PyArrow 表并将其转换为模式,然后再将其保存到 Parquet:

    import pyarrow.parquet as pq
    
    table = pa.Table.from_pandas(df).cast(env_schema)
    pq.write_table(table, f'path')
    

    【讨论】:

    • ArrowTypeError: ('int or Decimal object expected, got float', 'Conversion failed for column number with type object')
    • 我收到这个错误
    • @geds133 我更新了答案;我认为它现在应该适合你
    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2019-02-19
    • 2017-06-20
    相关资源
    最近更新 更多