You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyArrow中如何将JSON字符串字段转换为date32类型?

问题:PyArrow中字符串转date32类型报错如何解决?

给定JSON数据:

{
    "C_0_0":"2022-1-1"
}

指定的Schema定义:

import pyarrow as pa
import pyarrow.json as pajson

raw_schema = pa.schema([
    pa.field("C_0_0", pa.string()), 
])

new_schema = pa.schema([
    pa.field("C_0_0", pa.date32()), 
])

执行以下读取并转换类型的代码:

file_path = '/home/i574375/views/links/gitenv/gitsrc/sqla/src/db/engine/datalake_shared_resources/tests/pyunit/testscripts/datalake/abc.json'
table = pajson.read_json(file_path, parse_options = pajson.ParseOptions(explicit_schema = raw_schema))
table = table.cast(new_schema)

触发报错:

pyarrow.lib.ArrowNotImplementedError: Unsupported cast from string to date32 using function cast_date32

解决方案

PyArrow的cast方法不支持直接将字符串类型转为date32,需要先用字符串解析函数把日期字符串转换成日期类型,再替换原字段或构建新表。

方法一:先读字符串再解析转换

import pyarrow as pa
import pyarrow.json as pajson
import pyarrow.compute as pc

file_path = '/home/i574375/views/links/gitenv/gitsrc/sqla/src/db/engine/datalake_shared_resources/tests/pyunit/testscripts/datalake/abc.json'

# 读取原始字符串类型表
table = pajson.read_json(file_path, parse_options = pajson.ParseOptions(explicit_schema = raw_schema))

# 解析日期字符串为date32类型
date_col = pc.strptime(table["C_0_0"], format="%Y-%m-%d", unit="s").cast(pa.date32())

# 替换原字段生成新表
new_table = table.set_column(0, "C_0_0", date_col)

# 验证结果
print(new_table.schema)

方法二:读取时直接解析日期(更高效)

无需先读取为字符串类型,直接在读取JSON时指定日期解析规则:

import pyarrow as pa
import pyarrow.json as pajson

file_path = '/home/i574375/views/links/gitenv/gitsrc/sqla/src/db/engine/datalake_shared_resources/tests/pyunit/testscripts/datalake/abc.json'

parse_options = pajson.ParseOptions(
    parse_dates=True,
    date_format="%Y-%m-%d"
)
# 读取后直接得到date32类型的字段
table = pajson.read_json(file_path, parse_options=parse_options)

print(table.schema)

关键说明

  • pc.strptime支持自动匹配不补零的月/日格式(如2022-1-1),无需额外处理。
  • 解析后得到的是timestamp类型,再通过cast(pa.date32())转换为目标类型即可。

内容的提问来源于stack exchange,提问作者Abhik NASKAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:17:39