PySpark- OneHotEncoding

时间:2016-09-29 06:21:05

标签: python-2.7 apache-spark pyspark one-hot-encoding

这可能是天真的,但我刚开始使用PySpark和Spark。请帮助我理解Pyspark的One Hot Technique。我试图在其中一个列上进行OneHotEncoding。在一次热编码之后,数据帧架构添加了avector。但是要应用机器学习算法,应该是添加到现有数据框的单个列,每列代表一个类别,但不是矢量类型列。如何验证OneHotEncoding。

我的代码:

    stringIndexer = StringIndexer(inputCol="business_type", outputCol="business_type_Index")
    model = stringIndexer.fit(df)
    indexed = model.transform(df)
    encoder = OneHotEncoder(dropLast=False, inputCol="business_type_Index", outputCol="business_type_Vec")
    encoded = encoder.transform(indexed)
    encoded.select("business_type_Vec").show()

此显示:

+-----------------+
|business_type_Vec|
+-----------------+
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
|    (2,[0],[1.0])|
+-----------------+
only showing top 20 rows

新添加的列是矢量类型。如何将其转换为每个类别的各个列

1 个答案:

答案 0 :(得分:0)

您可能已经有了答案,但也许对其他人有帮助。对于矢量分割,您可以使用此答案(我已检查过它是否有效):

How to split dense Vector into columns - using pyspark

但是我认为你不需要将矢量转换回列(正如mtoto已经说过的那样),因为spark中的所有模型实际上都要求你提供矢量格式的输入功能(如果我错了请纠正我)