Как преобразовать RDD [org. apache .spark. sql .Row] в RDD [org. apache .spark.mllib.linalg.Vector] - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь преобразовать RDD [Row] в RDD [Vector], но выдает исключение, указывающее

java.lang.ClassCastException: org.apache.spark.ml.linalg.DenseVector cannot be cast to org.apache.spark.mllib.linalg.Vector

Мой код

val spark = SparkSession.builder().master("local").getOrCreate()
val df = spark.range(0,10).withColumn("uniform" , rand(10L)).withColumn("normal1" , randn(10L)).withColumn("normal2" , randn(11L))

val assembler = new VectorAssembler().setInputCols(Array("uniform" ,"normal1","normal2")).setOutputCol("features")
val dfVec = assembler.transform(df)
val dfOutlier =   dfVec.select("id" , "features").union(   spark.createDataFrame(Seq( (10 , org.apache.spark.mllib.linalg.Vectors.dense(3,3,3)) )) )
dfOutlier.show(false)
val scaler = new StandardScaler().setInputCol("features").setOutputCol("Scaled").setWithStd(true).setWithMean(true)
val model = scaler.fit(dfOutlier).transform(dfOutlier)
model.show(false)

val dfVecRdd = model.select("Scaled").rdd.map(_(0).asInstanceOf[org.apache.spark.mllib.linalg.Vector] )

Когда я выполняю действие на dfVecRdd , исключение повышено. Как я могу решить это?

1 Ответ

2 голосов
/ 24 апреля 2020

попробуйте удалить этот импорт в вашем коде

org.apache.spark.mllib.linalg.Vector

и импортировать этот

import org.apache.spark.ml.linalg.Vectors

Надеюсь, это может быть полезно.

С уважением.

...