2017-06-14 42 views
0

我收到類型不匹配錯誤以下情形類型不匹配發現:單位預計:RDD [XYZ ...]

//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]" 

我在做什麼錯在這裏?我該如何解決它?

請幫幫我。

回答

0

在Spark中,transformations懶惰。您需要執行action返回RDD[Person]。否則,你的函數將不會返回任何東西。這就是類型不匹配錯誤的原因。

+0

Spark的懶惰與此無關 - 它在編譯時根本不起作用。 –

+0

@TzachZohar,你試過重現錯誤嗎?因爲我這樣做了,並且如果不在最後放回返回語句,或者使用像personAll.cache()這樣的操作,編譯器將引發該類型不匹配異常。 – Micho

+0

正如其他答案所示,添加return語句(帶或不帶'return'關鍵字)解決了這個問題;返回正確的值不是Spark的「動作」,也不是「緩存」(它是一種轉換) - 兩者都確實解決了問題(因爲'cache'也返回'RDD [Person]'),但兩者都沒有任何關係這個答案。 –

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聲明已被註釋掉。

+0

謝謝你,可能語法問題是由於複製粘貼錯誤....實際的問題是它是返回單元,即使我刪除返回personAll語句刪除....此外,當我說scoresRDD.map(_。split(「, 「))。map(p => Person(p(0),p(1),」US「,p(2).toDouble))first()它給出類似這種類型不匹配的錯誤;找到:com.epam.hubd.spark.scala.core.homework.Person required:org.apache.spark.rdd.RDD [com.epam.hubd.spark.scala.core.homework.Person] sir can you help me – user3252097

+0

我在Skype上顯示實際的代碼片..如果您可以 – user3252097

+0

嘗試使用我在答案中添加的代碼片段。 對不起,但我在運輸;無法使用Skype。 :( –

相關問題