2017-03-15 2 views
1

Sparkを使用してScalaのDataFrameにある異なる(文字列と数値)タイプのカラムの最大値を取得するにはどうすればよいですか?グループのいくつかのカラムでSpark Dataframeを最大にする

+----+-----+-------+------+ 
|name|value1|value2|string| 
+----+-----+-------+------+ 
| A| 7|  10| "a"| 
| B| 4|  6| "b"| 
+----+-----+-------+------+ 

apply(max,axis=0)とパンダのように機能がありますか私は、UDFを記述する必要があります:

レッツはそれが私のデータ

+----+-----+-------+------+ 
|name|value1|value2|string| 
+----+-----+-------+------+ 
| A| 7|  9| "a"| 
| A| 1|  10| null| 
| B| 4|  4| "b"| 
| B| 3|  6| null| 
+----+-----+-------+------+ 

であり、所望の結果があると言いますか?

私ができることはdf.groupBy("name").max("value1")ですが、私は2つを実行することができませんmax行内にSequenceが働くのはmax()の機能です。

すぐに問題を解決するためのアイデアはありますか?

答えて

2

使用この

df.groupBy("name").agg(max("value1"), max("value2")) 
+0

も、私はすべての列をハードコーディングする必要はありません方法はありますか?すべての列をループしますか? (col < - df.columns){df = df.groupBy( "name")。max(col)} 'のようなものですか?厄介な30列を覚えていません –

+0

ああ、ところで:もちろん、列文字列からの文字列選択はその解決策では考慮されません。 –

+0

'max()'も 'agg'の文字列で動作します。しかし、それはアルファベット順に最大値を取るので、「ヌル」の名前を変更することを検討するかもしれません。 –

関連する問題