2017-12-29 15 views
-1

なぜこれが機能しないのかわかりません。私のケースクラスにマッピングするのではなく、タプルを返すだけでうまくいきます。それ以外の場合、私は以下のエラーが表示されます。データセットからケースクラスにマッピングするときのエラー

case class WinRate(name: String, played: Int, wins: Int, losses: Int)  
val winners = df.select($"winning_heroes").map(row => { 
     row.getList[String](0).toList().map(x => { 
     WinRate(x, 1, 1, 0) 
     }) 
    }).flatMap(x => x) 

エラー:メソッドの適用に十分な引数がありません。(n:Int)文字列in trait LinearSeqOptimized。未指定の値パラメータn。

+0

あなたは何をしようとしていますか? 'map'と' flatMap'を行うことは非常にうまくできているようです。最近、Spark SQLがどれくらいの頻度で提供しているのか(標準関数を参照) –

+0

私のデータベースには文字列の配列フィールドがあります。だから、私は文字列を引き出し、それらのそれぞれについてタプルを作成しています(上のケースクラスを実行しようとしています)。それから私は勝利を得るために.groupByと合計をしています。私はタプルを使って作業していますが、ちょうどケースクラスでそれをやりたかったのは、少し読みやすく/読むのが簡単だからです。私はスカラーにはかなり新しいので、おそらくそれを行うより良い/より慣用的な方法があります。 –

+0

'df.printSchema'をインクルードして質問を簡単に答えるように編集します。ありがとう。 –

答えて

1

toList()メソッドはどのように定義されていますか?あなたはparanthesisなしでそれを呼ぶことができますか?

row.getList[String](0).toList 
+0

違うエラーが発生します。データセットに格納されている型のエンコーダを見つけることができません。 spark.implicits._をインポートすることで、プリミティブ型(Int、Stringなど)とProduct型(ケースクラス)がサポートされます。他の型をシリアル化するためのサポートは、将来のリリースで追加されます。 –

関連する問題