发现 Scala Spark 类型不匹配的单元,需要 rdd.RDD

Scala Spark type missmatch found Unit, required rdd.RDD

我正在从用 scala 编写的 spark 项目中的 MySQL 数据库中读取 table。这是我的第一周,所以我真的不太健康。当我尝试 运行

  val clusters = KMeans.train(parsedData, numClusters, numIterations)

我收到 parsedData 的错误消息:"type mismatch; found : org.apache.spark.rdd.RDD[Map[String,Any]] required: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector]"

我的解析数据是这样创建的:

 val parsedData = dataframe_mysql.map(_.getValuesMap[Any](List("name", "event","execution","info"))).collect().foreach(println)

其中 dataframe_mysql 是从 sqlcontext.read.format("jdbc").option(....) function.

返回的任何内容

我应该如何转换我的单位以满足在火车功能中传递它的要求?

根据文档,我应该使用这样的东西:

data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()

我是否应该将我的值转换为两倍?因为当我尝试 运行 时,我的项目上面的命令会崩溃。

谢谢!

删除尾随 .collect().foreach(println)。在调用 collect 之后,您不再拥有 RDD - 它只是变成了一个本地集合。

随后,当您调用 foreach 时,它 returns Unit - foreach 用于执行副作用,例如打印集合中的每个元素。等等