【问题标题】:Scala Spark type missmatch found Unit, required rdd.RDDScala Spark type mismatch found Unit, required rdd.RDD
【发布时间】:2016-05-30 11:58:59
【问题描述】:

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

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

我收到 parsedData 的错误消息:“类型不匹配;找到: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()

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的!我这样做了,但即使没有它也不匹配:类型不匹配;找到:org.apache.spark.rdd.RDD[Map[String,Any]] 需要:org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector]
    • 对于 KMeans,您需要将所有特征转换为 Doubles 并从中创建一个 Vector。 MLLib 指南中的示例由“”分隔,因为输入由空格分隔,并且它们是使用 map(_.toDouble) 转换的数值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2015-05-30
    • 2021-07-26
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多