通过删除特定列 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))

并像上面那样使用它