PySpark:无法导入名称“OneHotEncoderEstimator”

nov*_*der 6 python apache-spark pyspark

我刚刚开始学习Spark。目前,我正在尝试对数据帧中的单个列执行一次热编码。但是我无法从 pyspark 导入 OneHotEncoderEstimator。我尝试导入OneHotEncoder(在3.0.0中已分离),spark可以导入它,但它缺少转换功能。这是我下面的代码的输出。如果有人遇到类似问题,请帮忙。非常感谢您的参与!!

在此输入图像描述

小智 10

除了Ulgen之外,从spark 2.4版本开始OneHotEncoderEstimator已经更名为。OneHotEncoder


Ulg*_*gen 4

您的第一个问题是编码器对象没有“转换”错误。这是一个类别索引器。在转换对象的列之前,必须使用 fit() 函数训练 OneHotEncoderEstimator。通过这种方式,您的编码器对象将从数据中学习,并将能够将数据传输到编码的类别向量。大多数类别索引器模型都需要 fit() 函数来从数据本身中学习。

所以你应该做的是

encoder = OneHotEncoderEstimator(dropLast=False, inputCol:"AgeIndex", outputCol="AgeVec"
model = encoder.fit(df)
encoded = model.transform(df)
encoded.show()
Run Code Online (Sandbox Code Playgroud)

另外,如果您对某些东西不熟悉,我建议您在开始项目之前阅读文档,文档会很有帮助。包含转换操作的 Spark 部分作为链接发布在此处。

Spark 转换操作

你的第二个问题是导入错误,因为你使用的是笔记本,我建议你应该检查你的笔记本的环境。但您的版本是预览版,主要考虑开发人员和测试人员。对于初学者来说,应该始终选择最新的经过测试的版本。尝试切换回spark-2.4.4并检查笔记本的环境。