Scala Spark类型missmatch找到Unit,需要rdd.RDD

时间:2016-05-30 11:59:00

标签: mysql scala apache-spark type-mismatch training-data

我正在用scala编写的spark项目中的MySQL数据库中读取一个表。这是我的第一周,所以我真的不太适合。当我试图运行时

  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()

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

谢谢你!

1 个答案:

答案 0 :(得分:1)

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

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