Apache spark 通过删除特定列创建特征向量

Apache spark 通过删除特定列创建特征向量,apache-spark,spark-dataframe,apache-spark-mllib,Apache Spark,Spark Dataframe,Apache Spark Mllib,我使用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 Vecto

我使用
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”之外的所有列


感谢您的帮助

最简单的方法之一是获取所有列名,转换为一个集合,减去不需要的列,然后再次将其用作数组

val datasetColumnsToBeUsed = dataset.columns.toSet - "id" - "f1" toArray
import org.apache.spark.ml.feature.VectorAssembler
val assembler = (new VectorAssembler()
  .setInputCols(Array(datasetColumnsToBeUsed: _*))
  .setOutputCol("featureVec"))
另一个最简单的方法是在列名上使用
过滤器


如上所述使用它

@vanja_65,我添加了另一个简单的方法:)太好了!谢谢;-)
val columnNames = dataset.columns
val datasetColumnsToBeUsed = columnNames.filterNot(x => Array("id", "f1").contains(x))