如何将pyspark-mllib-kmeans应用于分类变量

时间:2016-01-10 00:27:48

标签: python apache-spark pyspark apache-spark-mllib

有一个巨大的数据文件,包含所有分类列。在mllib中应用kmeans之前,我需要对数据进行虚拟编码。这在pySpark中是如何实现的?

谢谢

1 个答案:

答案 0 :(得分:0)

嗯,技术上有可能。 Spark,包括PySpark,提供了许多变换器,我们可以用它来编码分类数据。特别要考虑ml.feature.StringIndexerOneHotEncoder

from pyspark.ml.feature import OneHotEncoder, StringIndexer

df = sc.parallelize([(1, "foo"), (2, "bar")]).toDF(["label", "feature"])
stringIndexer = StringIndexer(inputCol="feature", outputCol="indexed")
model = stringIndexer.fit(df)
indexed = model.transform(df)
encoder = OneHotEncoder(inputCol="indexed", outputCol="encoded")
encoded = encoder.transform(indexed)

到目前为止一切顺利。问题是分类变量在k均值的情况下不是很有用。它假设欧几里德范数,即使在编码之后,对于分类数据也没有意义。