2017-06-14 17 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

スパークでは、transformationsです。レイジーです。 actionを実行してRDD[Person]を返す必要があります。それ以外の場合、関数は何も返しません。そのため、タイプの不一致のエラーです。

+0

スパークの怠惰は、これとはまったく関係がありません。コンパイル時にはまったく影響を与えません。 –

+0

@TzachZohar、あなたはエラーを再現してみましたか?私がしたので、最後にreturn文を返さないか、 'personAll.cache()'のようなアクションを使うと、コンパイラはその型不一致例外をスローします。 – Micho

+0

return文( 'return'キーワードの有無にかかわらず)を追加すると、他の答えが示唆するように、問題が解決されます。正しい値を返すことはSparkの "action"ではなく、 'cache'(これは変換)でもありません。(' cache'も 'RDD [Person]'を返すので)本当に問題を解決しますが、この答え。 –

1

YOURメソッドの署名は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()この型の不一致のようなエラーを返します。 found:com.epam.hubd.spark.scala.core.homework.Person required:org.apache.spark.rdd.RDD [com.epam.hubd.spark.scala.core.homework.Person]あなたは私を助けることができますか? – user3252097

+0

私はskypeで実際のコードを表示しています。できるだけ – user3252097

+0

私の答えで追加したコードスニペットを試してみてください。 申し訳ありませんが、私は通過中です。 Skypeを使用できません。 :( –

関連する問題