发现类型不匹配:预期单位:RDD [XYZ ...]

时间:2017-06-14 05:46:07

标签: scala apache-spark

我在以下情况下遇到类型不匹配错误

//scores sample file  
0000006,Danny,6.2  
0000002,Danny,7.0  

代码。

 case class Person(id: String, dob: String, country: String, score: Double) 

 def getResultRecords(persons: RDD[List[String]]): RDD[Person] = {

   val personUS = persons.map(rec => Person(rec.head, rec(1),"US"), java.lang.Double.parseDouble(cpg.getOrElse(rec.head,"0").toString())
   val personMX = persons.map(rec => Person(rec.head, rec(1),"MX"),java.lang.Double.parseDouble(cpg.getOrElse(rec.head,"0").toString()))
   val personAll = personUS.union(personMX)
   //return personAll
}//Getting an error saying " type mismach found : Unit expected : RDD[Person]"

我在这里做错了什么?我该如何解决?

请帮帮我。

2 个答案:

答案 0 :(得分:1)

你的方法签名是def getResultRecords(persons: RDD[List[String]]): RDD[Person];这意味着该方法应返回RDD[Person]

的实例

然而,同一方法的最后一行说 - val personAll = personUS.union(personMX) - 什么都不返回。

取消注释return personAll行 - 这将删除您的例外。

另外,我发现你的语法有些问题。

这是您的代码段。

case class Person(id: String, dob: String, country: String, score: Double) 

def getResultRecords(persons: RDD[List[String]]): RDD[Person] = {

  val personUS = persons.map(rec => Person(rec.head, rec(1),"US", java.lang.Double.parseDouble(cpg.getOrElse(rec.head,"0").toString()))
  val personMX = persons.map(rec => Person(rec.head, rec(1),"MX",java.lang.Double.parseDouble(cpg.getOrElse(rec.head,"0").toString()))
  val personAll =  personUS.union(personMX)
  return personAll
}

此处给出了一个额外的括号) - Person(rec.head, rec(1),"US"return陈述被注释掉了。

答案 1 :(得分:0)

在Spark中,transformations 懒惰。您需要执行 action 返回RDD[Person]。否则,您的功能将不会返回任何内容。这就是Type Mismatch错误的原因。