使用spark ml训练模型时如何处理文本文件中的数百列数据
how to deal with hundreds of colums data from textfile when training a model using spark ml
我有一个包含数百列的文本文件,但这些列没有列名。
第一列是标签,其他是特征。我已经阅读了一些必须为火车数据指定 cloumn 名称的示例。但是因为栏目太多,要指定所有的名字还是挺麻烦的。
我该如何处理这种情况?
您可以结合使用 VectorAssempler
和 list comprehension
来构建模型训练数据。考虑具有两个特征列(x1
和 x2
)和一个响应变量 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|
+---------+---+
我有一个包含数百列的文本文件,但这些列没有列名。
第一列是标签,其他是特征。我已经阅读了一些必须为火车数据指定 cloumn 名称的示例。但是因为栏目太多,要指定所有的名字还是挺麻烦的。
我该如何处理这种情况?
您可以结合使用 VectorAssempler
和 list comprehension
来构建模型训练数据。考虑具有两个特征列(x1
和 x2
)和一个响应变量 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|
+---------+---+