2017-02-21 8 views
3

名前がc1、c2、c3、c4の列のデータフレームがあります。私は、列のグループ、それにしたいとAGGの関数の結果に基づいて、対応する他の列の値を例えば最小/最大/ AGG ...など他の列にAGG機能を使用して取得データフレームgroupBy、集計関数の結果に基づいて対応する行の値を取得

例:

c1 c2 c3 c4 
1 23 1 1 
1 45 2 2 
1 91 3 3 
1 90 4 4 
1 71 5 5 
1 42 6 6 
1 72 7 7 
1 44 8 8 
1 55 9 9 
1 21 0 0 

生じるはずである:

c1 c2 c3 c4 
1 91 3 3 

レットが

df.groupBy($"c1").agg(max($"c2"), ??, ??) 

dfを可能DATAFRAME誰かがHELしてくださいすることができますpはどこに行かなければならないのですか?

私はRDDを使用してこの問題を解決しています。これは、データフレーム/データセットAPI

+0

私はこの回答が役に立ったと評価してい。それはあなたが望むものを正確に行うことを提案します。 :https://stackoverflow.com/questions/41236804/spark-dataframes-reducing-by-key – user238607

答えて

2

を使用して簡単な方法で解決することができる場合は、2つの段階でこれを行うことができます探求する募集:

  • が集約されたデータフレームを計算します。

  • 元のデータフレームとデータフレームを結合し、条件に基づいてフィルタリングします。

    そう

val maxDF = df.groupBy("c1").agg(max($"c2").as("maxc2")) 
// maxDF: org.apache.spark.sql.DataFrame = [c1: int, maxc2: int] 

df.join(maxDF, Seq("c1")).where($"c2" === $"maxc2").drop($"maxc2").show 
+---+---+---+---+ 
| c1| c2| c3| c4| 
+---+---+---+---+ 
| 1| 91| 3| 3| 
+---+---+---+---+ 
+0

_たくさんありがとう@Psidom_ –

+0

答えに記載されている解決策については、ここでどう思いますか:https://stackoverflow.com/質問/ 41236804/spark-dataframes-by-by-key – user238607

関連する問題