我正在用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()
我是否应该将我的价值观转换为双倍?因为当我尝试运行上面的命令时,我的项目会崩溃。
谢谢你!答案 0 :(得分:1)
删除尾随.collect().foreach(println)
。在调用collect
之后,您不再拥有RDD - 它只是变成了本地集合。
随后,当您致电foreach
时,它会返回Unit
- foreach用于执行副作用,例如打印集合中的每个元素。等