当使用spark ml训练模型时,如何处理来自textfile的数百个colums数据

时间:2016-10-13 12:34:54

标签: apache-spark apache-spark-mllib apache-spark-ml

我有一个包含数百列的文本文件,但这些列没有列名。

第一列是标签,其他是功能。我已经阅读了一些必须为列车数据指定cloumn名称的示例。但由于列数太多,因此指定所有名称非常麻烦。

我该如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

您可以将VectorAssemplerlist comprehension结合使用,以构建数据以进行模型培训。请考虑此示例数据,其中包含两个要素列(x1x2)和一个响应变量y

df = sc.parallelize([(5, 1, 6),
                     (6, 9, 4),
                     (5, 3, 3),
                     (4, 4, 2),
                     (4, 5, 1),
                     (2, 2, 2),
                     (1, 7, 3)]).toDF(["y", "x1", "x2"])

首先,我们创建一个非"y"的列名列表:

colsList = [x for x in df.columns if x!= 'y']

现在,我们可以使用VectorAssembler

from pyspark.ml.feature import VectorAssembler

vectorizer = VectorAssembler()
vectorizer.setInputCols(colsList)
vectorizer.setOutputCol("features")

output = vectorizer.transform(df)
output.select("features", "y").show()
+---------+---+
| features|  y|
+---------+---+
|[1.0,6.0]|  5|
|[9.0,4.0]|  6|
|[3.0,3.0]|  5|
|[4.0,2.0]|  4|
|[5.0,1.0]|  4|
|[2.0,2.0]|  2|
|[7.0,3.0]|  1|
+---------+---+