Когда я пытался преобразовать DataFrame искру в в РДД [org.apache.spark.mllib.linalg.Vector] используя следующий код:Преобразовать искры из к РДУ [Вектор]
import org.apache.spark.sql.Row
import org.apache.spark.mllib.linalg.Vectors
val df = sqlContext.createDataFrame(
Seq((0.1, 0.2, 0.4))
).toDF("t1", "t2", "t3")
df.rdd.map{ case Row(row: Seq[_]) =>
Vectors.dense(row.asInstanceOf[Seq[Double]].toArray)
}.collect
Я получил сообщение об ошибке, как это:
scala.MatchError: [0.1,0.2,0.4] (of class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema)
Тогда я попробовал другой метод:
df.content.rdd.map{ case row =>
Vectors.dense(row.toSeq.toArray.map{
x => x.asInstanceOf[Double]
})
}.collect
Это сработало отлично.
В то время как первый метод был введен в official version of Spark-2.2.0-SNAPSHOT при преобразовании строки в массив [Двойной], он не работает.
Может ли кто-нибудь выяснить причину?