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

pyarrow.compute.less_equal与Python<=行为不符,求问题排查思路

问题描述

调试PyArrow时遇到一个奇怪的问题,代码片段如下:

pa_execution_date = Z['execution_date'][i]
py_execution_date = pa_execution_date.as_py()
pa_report_date = Z['report_date'][i]
py_report_date = pa_report_date.as_py()
print(pa_execution_date)
print(pa_report_date)
print(py_execution_date)
print(py_report_date)
assert (pc.less_equal(pa_execution_date, pa_report_date))
assert (py_execution_date <= py_report_date)

在某些情况下,第二个断言(Python原生<=比较)失败,但第一个断言(pc.less_equal)却不失败。出现问题时的打印输出为:

1591303729000000000
1591303728000000000
1591303729000000000
1591303728000000000

原本预期第一个断言会先失败,而非第二个断言单独失败,请问哪里操作有误?

问题分析与解决

核心问题是**pc.less_equal的调用方式错误**:

  • pc.less_equal是PyArrow的表达式函数,它的设计目标是作用于PyArrow数组或表达式上下文,而非单独的标量值。当你直接传入两个PyArrow标量时,它不会执行实际的比较操作,而是返回一个未计算的表达式对象。在Python的assert语句中,非空对象的布尔值为True,所以第一个断言永远不会触发失败。
  • 第二个断言是Python原生的数值比较,1591303729000000000确实大于1591303728000000000,所以<=比较返回False,断言正常失败。

要让两个断言的行为一致,有两种修正方式:

  1. 直接使用PyArrow标量自身的比较运算符:
assert pa_execution_date <= pa_report_date
  1. 如果坚持使用pc.less_equal,需要调用evaluate()方法执行实际计算:
assert pc.less_equal(pa_execution_date, pa_report_date).evaluate()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:40:15