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

PyArrow按日期时间列筛选Parquet子集报类型不匹配错误

问题场景

使用pyarrow库的read_table方法读取Parquet文件、按时间字段筛选数据子集,初始实现代码如下:

import pyarrow.parquet as pq


s3_uri = "Path to s3"
fp = pq.read_table(
            source = s3_uri,
            use_threads = True,
            filters = [('Date_Time' ,'>=','2022-07-08'),('Date_Time' ,'<', '2022-07-09')]
            )
print(fp.to_pandas())

执行代码时抛出如下错误:

pyarrow.lib.ArrowNotImplementedError: Function greater_equal has no kernel matching input types (array[timestamp[us]], scalar[string])

故障原因

筛选条件中传入的日期比较值为字符串类型,与Date_Time列存储的微秒级时间戳类型(timestamp[us])不匹配,对应比较函数没有适配这组输入类型的处理内核,无法执行比较逻辑。

修复方案

将筛选条件中的字符串日期值,转换为和目标列类型匹配的时间戳标量即可,修正后代码如下:

import pyarrow as pa
import pyarrow.parquet as pq


s3_uri = "Path to s3"
# 按列的实际时间精度转换筛选值,这里对应原报错的微秒级精度
start_time = pa.scalar("2022-07-08", type=pa.timestamp("us"))
end_time = pa.scalar("2022-07-09", type=pa.timestamp("us"))

fp = pq.read_table(
            source = s3_uri,
            use_threads = True,
            filters = [('Date_Time' ,'>=', start_time),('Date_Time' ,'<', end_time)]
            )
print(fp.to_pandas())

注意:如果Date_Time列的时间精度不是微秒(比如为毫秒ms、纳秒ns),需要把pa.timestamp()的入参替换为对应精度单位,避免隐式类型转换带来的筛选异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:03:15