Koalas/Pandas-on-Spark运行报TypeError: str object is not callable
报错原因结论
列数据类型为<U0不是触发该TypeError: str object is not callable报错的原因。
<U0是小端序0长度Unicode字符串的类型标识,属于Spark/Koalas类型推断时生成的特殊字符串类型,只会引发值匹配、聚合结果不符合预期的逻辑问题,不会触发「对象不可调用」类的类型错误。- 报错的核心原因是你当前使用的Koalas版本,不支持向
groupby().transform()传入字符串形式的聚合函数名:你写的.transform('sum')中传入的'sum'是字符串类型,Koalas执行逻辑时会尝试把这个字符串当做可调用函数运行,自然就抛出了字符串不能被调用的错误。
修复方法
将字符串形式的聚合参数替换为直接调用对应聚合方法即可,修正后的代码如下:
# 生成时间是否为目标值的布尔标记 is_target_time = df.time.eq('00:00:00') # 按车辆ID分组后直接调用.sum()方法做transform聚合,不要传入'sum'字符串 target_time_count = is_target_time.groupby(df.vehicle_id).transform.sum() # 过滤得到最终结果 result_df = df[~(target_time_count >= 2)]
额外提示:如果后续排查发现
<U0类型引发值匹配失效(比如列中明明存在'00:00:00'的值却匹配不到),可以通过df = df.astype({'time': str, 'vehicle_id': str})显式将两列转换为标准字符串类型,修正隐式类型推断带来的异常。
内容的提问来源于stack exchange,提问作者sampeterson
相关产品推荐
相关产品推荐

