如何在 Pyspark 的 VectorAssembler 中使用字符串变量

kas*_*asa 4 random-forest pyspark

我想在 Pyspark 上运行随机森林算法。Pyspark 文档中提到VectorAssembler 仅接受数字或布尔数据类型。因此,如果我的数据包含 Stringtype 变量,例如城市名称,我是否应该对它们进行 one-hot 编码,以便进一步进行随机森林分类/回归?

这是我一直在尝试的代码,输入文件在这里

train=sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('filename')
drop_list = ["Country", "Carrier", "TrafficType","Device","Browser","OS","Fraud","ConversionPayOut"]
from pyspark.sql.types import DoubleType
train = train.withColumn("ConversionPayOut", train["ConversionPayOut"].cast("double"))#only this variable is actually double, rest of them are strings
junk = train.select([column for column in train.columns if column in drop_list])
transformed = assembler.transform(junk)
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息IllegalArgumentException: u'Data type StringType is not supported.'

PS:抱歉问了一个基本问题。我来自 R 背景。在R中,当我们进行随机森林时,不需要将分类变量转换为数值变量。

Mar*_*usz 5

是的,您应该使用StringIndexer,也许与OneHotEncoder一起使用。您可以在链接文档中找到有关这两者的更多信息。