为何sum函数无法处理PyArrow字段?functools.reduce却可行?
为什么
sum(fields)报错但functools.reduce(operator.add, fields)成功? 核心原因在于两者的累加逻辑完全不同:
Python内置
sum()的问题:sum()默认会以整数0作为累加的初始值。执行sum(fields)时,第一步会尝试计算0 + ds.field('a'),但PyArrow的Expression对象(ds.field返回的类型)不支持和整数0做加法运算,直接触发类型错误。functools.reduce()的正确逻辑:reduce()默认从序列的前两个元素开始执行运算。对你的例子来说,它先计算ds.field('a') + ds.field('b'),得到一个新的Expression对象,接着用这个结果和ds.field('c')继续做加法——整个过程都是Expression对象之间的合法操作,自然能生成嵌套的加法表达式。
如果非要用sum()实现类似效果,你需要指定一个和Expression兼容的初始值,比如sum(fields, ds.scalar(0)),不过这和reduce的结果逻辑会有细微差异(相当于0 + a + b + c而非a + b + c)。
内容的提问来源于stack exchange,提问作者actual_panda
相关产品推荐
相关产品推荐

