通过删除特定列 Spark ML 创建特征向量
Create a vector of features by droping specific columns Spark ML
我使用 VectorAssembler
从 >2000 列中创建一个特征向量,这样我就可以 运行 在其上进行 PCA。我通常会明确说明哪些列需要包含在特征向量中:
val dataset = (spark.createDataFrame(
Seq((0, 1.2, 1.3, 1.7, 1.9), (1, 2.2, 2.3, 2.7, 2.9), (2, 3.2, 3.3, 3.5, 3.7))
).toDF("id", "f1", "f2", "f3", "f4"))
val assembler = (new VectorAssembler()
.setInputCols(Array("f2", "f3"))
.setOutputCol("featureVec"))
但是如果超过 2000 列,我如何指定应包含除 "id" 和 "f1" 之外的所有列?
感谢任何帮助!
最简单的方法之一是获取所有列名,转换为一个集合并减去不需要的列,然后再次将其用作数组 as
val datasetColumnsToBeUsed = dataset.columns.toSet - "id" - "f1" toArray
import org.apache.spark.ml.feature.VectorAssembler
val assembler = (new VectorAssembler()
.setInputCols(Array(datasetColumnsToBeUsed: _*))
.setOutputCol("featureVec"))
另一种最简单的方法是在 列名称 上使用 filter
作为
val columnNames = dataset.columns
val datasetColumnsToBeUsed = columnNames.filterNot(x => Array("id", "f1").contains(x))
并像上面那样使用它
我使用 VectorAssembler
从 >2000 列中创建一个特征向量,这样我就可以 运行 在其上进行 PCA。我通常会明确说明哪些列需要包含在特征向量中:
val dataset = (spark.createDataFrame(
Seq((0, 1.2, 1.3, 1.7, 1.9), (1, 2.2, 2.3, 2.7, 2.9), (2, 3.2, 3.3, 3.5, 3.7))
).toDF("id", "f1", "f2", "f3", "f4"))
val assembler = (new VectorAssembler()
.setInputCols(Array("f2", "f3"))
.setOutputCol("featureVec"))
但是如果超过 2000 列,我如何指定应包含除 "id" 和 "f1" 之外的所有列?
感谢任何帮助!
最简单的方法之一是获取所有列名,转换为一个集合并减去不需要的列,然后再次将其用作数组 as
val datasetColumnsToBeUsed = dataset.columns.toSet - "id" - "f1" toArray
import org.apache.spark.ml.feature.VectorAssembler
val assembler = (new VectorAssembler()
.setInputCols(Array(datasetColumnsToBeUsed: _*))
.setOutputCol("featureVec"))
另一种最简单的方法是在 列名称 上使用 filter
作为
val columnNames = dataset.columns
val datasetColumnsToBeUsed = columnNames.filterNot(x => Array("id", "f1").contains(x))
并像上面那样使用它