【问题标题】:How to convert RDD[org.apache.spark.sql.Row] to RDD[org.apache.spark.mllib.linalg.Vector]如何将 RDD[org.apache.spark.sql.Row] 转换为 RDD[org.apache.spark.mllib.linalg.Vector]
【发布时间】:2020-08-08 11:52:33
【问题描述】:

我正在尝试将 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 执行操作时,会引发异常。我该如何解决这个问题?

【问题讨论】:

    标签: scala apache-spark rdd apache-spark-mllib apache-spark-ml


    【解决方案1】:

    尝试在您的代码中删除此导入

    org.apache.spark.mllib.linalg.Vector
    

    并导入这个

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

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多