【问题标题】:PySpark: cannot import name 'OneHotEncoderEstimator'PySpark:无法导入名称“OneHotEncoderEstimator”
【发布时间】:2020-01-27 07:11:43
【问题描述】:
我刚刚开始学习 Spark。目前,我正在尝试对我的数据帧中的单个列执行一次热编码。但是我无法从 pyspark 导入 OneHotEncoderEstimator。我尝试导入 OneHotEncoder(在 3.0.0 中已弃用),spark 可以导入它,但它缺少转换功能。这是下面我的代码的输出。如果有人遇到过类似的问题,请帮忙。非常感谢您的参与!!
【问题讨论】:
标签:
python
apache-spark
pyspark
【解决方案1】:
除了 Ulgen,OneHotEncoderEstimator 已从 spark 版本 2.4 起重命名为 OneHotEncoder。
【解决方案2】:
您的第一个问题是编码器对象没有“转换”错误。这是一个类别索引器。在转换对象列之前,您必须使用 fit() 函数训练 OneHotEncoderEstimator。这样,您的编码器对象将从数据中学习,并将能够将数据传输到编码的类别向量。大多数类别索引器模型都需要 fit() 函数来从数据本身中学习。
所以你应该做的是
encoder = OneHotEncoderEstimator(dropLast=False, inputCol:"AgeIndex", outputCol="AgeVec"
model = encoder.fit(df)
encoded = model.transform(df)
encoded.show()
另外,如果您对某事不熟悉,我建议您在开始项目之前阅读文档,文档对您有很大帮助。包含转换操作的 spark 部分在此处作为链接发布。
Spark Transformation Operations
您的第二个问题是导入错误,因为您使用的是笔记本,我建议您检查笔记本的环境。但是您的版本是预览版,主要考虑开发人员和测试人员。对于初学者来说,应该总是选择最新的测试版本。尝试切换回 spark-2.4.4 并检查笔记本的环境。
【讨论】:
-
非常感谢您的快速回复!我确实从 spark github repo 中阅读了 OneHotEncoder example,但我输入了错误的,所以它被窃听了。