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

PySpark执行OneHotEncoder时出现__init__()获意外关键字参数outputCols报错

错误原因
  • PySpark版本不兼容:你使用的PySpark版本低于3.0,该版本中OneHotEncoder仅支持单列处理,初始化仅接受单数形式的inputCol、outputCol参数,不存在你代码中使用的复数形式inputCols、outputCols参数,因此触发参数不识别的TypeError。
  • 列名拼写错误:构造assemblerInputs时使用了classVsc后缀,但OneHotEncoder定义的输出后缀为classVec,后续运行会报特征列不存在的错误
  • 流水线阶段重复添加:标签编码、特征拼接的逻辑写在了分类列遍历的for循环内部,每遍历一个分类列就会重复添加一次对应阶段,会导致流水线逻辑异常。
解决方法

方案1:适配PySpark <3.0版本(修改参数写法+调整代码逻辑)

修正后的完整代码如下:

stages = []

for categoricalCol in categoricalColumns:
    stringIndexer = StringIndexer(
        inputCol=categoricalCol, outputCol=categoricalCol + "Index"
    )
    # 替换为单数形式的inputCol、outputCol参数,去掉数组包裹
    encoder = OneHotEncoder(
        inputCol=stringIndexer.getOutputCol(),
        outputCol=categoricalCol + "classVec",
    )
    stages += [stringIndexer, encoder]

# 以下逻辑移到for循环外部,避免重复添加
label_stringIdx = StringIndexer(inputCol="Status", outputCol="label")
stages += [label_stringIdx]
# 修正拼写错误,把classVsc改为classVec
assemblerInputs = [c + "classVec" for c in categoricalColumns] + numericColumns
assembler = VectorAssembler(inputCols=assemblerInputs, outputCol="features")
stages += [assembler]

方案2:如果使用PySpark >=3.0版本

可以利用多列处理特性简化代码,不需要遍历每个分类列:

from pyspark.ml.feature import OneHotEncoder

stages = []
# 批量对所有分类列做索引编码
stringIndexer = StringIndexer(
    inputCols=categoricalColumns,
    outputCols=[c + "Index" for c in categoricalColumns]
)
# 批量做独热编码
encoder = OneHotEncoder(
    inputCols=stringIndexer.getOutputCols(),
    outputCols=[c + "classVec" for c in categoricalColumns]
)
stages += [stringIndexer, encoder]

label_stringIdx = StringIndexer(inputCol="Status", outputCol="label")
stages += [label_stringIdx]

assemblerInputs = [c + "classVec" for c in categoricalColumns] + numericColumns
assembler = VectorAssembler(inputCols=assemblerInputs, outputCol="features")
stages += [assembler]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:45:03