2017-06-24 3 views
0
val drdd = Seq(("a", 1), ("b", 2), ("a", 3)).toDF("name", "value").toJavaRDD 
drdd.map{ (row: Row) => row.get(0) } 

私は渡された匿名関数は、行=>どれそれが期待されている間org.apache.spark.api.java.function.Function [org.apache.spark.sql.Row ,?]spark/scalaのJavaRDD [org.apache.spark.sql.Row]のマッピングに使用できる関数を作成する方法は?

であるように思えます
<console>:35: error: type mismatch; 
found : org.apache.spark.sql.Row => Any 
required: org.apache.spark.api.java.function.Function[org.apache.spark.sql.Row,?] 
    drdd.map{ (row: Row) => row.get(0) } 
         ^

これらの関数型の違いは何ですか?どのように関数を構成しますか?ありがとう!

+0

なぜあなたはRDD javaRDDを変換していないでしょうか? –

答えて

1

例:

drdd.map(new org.apache.spark.api.java.function.Function[Row, String]() { 
    override def call(row: Row): String = row.getString(0) 
}) 
+0

それは動作します!ありがとう!私はこの例でscala annoymous関数がなぜ機能するのか分かりません。 https://spark.apache.org/docs/latest/programming-guide.html val lineLengths = lines.map(s => s.length) –

+0

この例は、異なるタイプのRDDおよびJavaRDDクラスを使用しているため動作します入力パラメータが異なります。基本的に私はScalaでJavaRDDを使用する理由を理解できませんが、Scala RDDを使用するべきです。 –

+0

ああ...私は彼らが別のクラスであることに気付かなかった! toJavaRDDメソッドがあるので、私はそれを使用しました。今、scala RDDを返す.rddメソッドがあることがわかります。今はすべて私にとって意味があります。再度ありがとう、Piotr! –

関連する問題