PySpark : 将DataFrame中字符串类型的列转换为Double类型时出现KeyError

我在学习使用PySpark进行机器学习。我有一个数据集,其中包含几个String类型的列,这些列的值可能是True或False或Yes或No。我正在使用DecisionTree,我想将这些String值转换为相应的Double值,即True, Yes应更改为1.0,而False, No应更改为0.0。我看到一个教程中做了同样的事情,于是我写了如下代码

df = sqlContext.read.csv("C:/../churn-bigml-20.csv",inferSchema=True,header=True)from pyspark.sql.types import DoubleTypefrom pyspark.sql.functions import UserDefinedFunctionbinary_map = {'Yes':1.0, 'No':0.0, 'True':1.0, 'False':0.0}toNum = UserDefinedFunction(lambda k: binary_map[k], DoubleType())csv_data = df.drop('State').drop('Area code') \    .withColumn('Churn', toNum(df['Churn'])) \    .withColumn('International plan', toNum(df['International plan'])) \    .withColumn('Voice mail plan', toNum(df['Voice mail plan'])).cache()

然而,当我运行这段代码时,出现了很多这样的错误。

  File "C:\..\spark-2.1.0\python\lib\pyspark.zip\pyspark\worker.py", line 70, in <lambda>  File "C:\..\workspace\PyML\src\ModelBuilding.py", line 20, in <lambda>    toNum = UserDefinedFunction(lambda k: binary_map[k], DoubleType())KeyError: False

注意:我使用的是Spark 2.1和Python 3.5进行PySpark开发,而我所参考的教程使用的是Spark 1.6和Python 2.7。所以我不知道这是否是Python语法问题之一。


回答:

我通过更改映射部分解决了这个问题:

binary_map = {'Yes':1.0, 'No':0.0, True : 1.0, False : 0.0}toNum = UserDefinedFunction(lambda k: binary_map[k], DoubleType())

我只是去掉了True和False的引号。我觉得这有点奇怪,但当我使用print(df.printSchema())检查DataFrame的模式时,它显示包含True和False值的字段是boolean类型。

模式

root |-- State: string (nullable = true) |-- Account length: integer (nullable = true) |-- Area code: integer (nullable = true) |-- International plan: string (nullable = true) |-- Voice mail plan: string (nullable = true)  .  .  . |-- Customer service calls: integer (nullable = true) |-- Churn: boolean (nullable = true)

所以这就是为什么我必须去掉引号。谢谢。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注