Для преобразователя PCA в Spark требуется столбец, созданный VectorAssembler
. Здесь вы создаете один, но никогда не используете его. Кроме того, VectorAssembler
принимает только цифры в качестве входных данных. Я не знаю, что типа features
, но если это массив, он не будет работать. Сначала преобразуйте его в цифры c столбцов. Наконец, плохая идея называть собранный столбец так же, как и исходный столбец. Действительно, VectorAssembler
не удаляет входные столбцы, и в итоге вы получите два features
столбца.
Вот рабочий пример вычисления PCA в Spark:
import org.apache.spark.ml.feature._
val df = spark.range(10)
.select('id, ('id * 'id) as "id2", ('id * 'id * 'id) as "id3")
val assembler = new VectorAssembler()
.setInputCols(Array("id", "id2", "id3")).setOutputCol("features")
val assembled_df = assembler.transform(df)
val pca = new PCA()
.setInputCol("features").setOutputCol("pcaFeatures").setK(2)
.fit(assembled_df)
val result = pca.transform(assembled_df)