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

为什么PySpark的Row在Pandas UDF内可正常运行,外部调用却报错

问题原因解答

核心差异点

两个场景下Spark Row 对象的构造规则不一致,是报错的根本原因:

  • mapPartitions 函数内执行时,返回的Row列表仅作为RDD的元素传输,后续你调用toDF(X_columns)时才会给每个位置的元素绑定字段名,Spark此时不会校验Row构造时的参数类型,只按位置匹配字段,所以可以正常运行。
  • 本地直接执行列表推导时,默认的Row构造逻辑是第一个参数为字段名字符串,你传入的首参数是float类型的数值,直接触发类型不匹配错误。

修复方案

你可以任选以下一种方式修改本地代码,即可正常运行:

方案1:按字段名传参构造Row

[Row(**dict(zip(X_columns, [float(f) for f in pd_small.values[i]]))) for i in range(len(pd_small.values))]

方案2:预定义位置参数的Row模板

from pyspark.sql import Row
# 先按字段顺序定义Row模板
CustomRow = Row(*X_columns)
[CustomRow(*[float(f) for f in pd_small.values[i]]) for i in range(len(pd_small.values))]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:48:01