2017-01-27 7 views
1

列を比較して重複を削除して2つのデータフレームをマージする方法を教えてください。Spark Dataframesの式を使用して重複する行をマージする方法

I have two dataframes with same column names 
 
a.show() 
 
+-----+----------+--------+ 
 
| name|  date|duration| 
 
+-----+----------+--------+ 
 
| bob|2015-01-13|  4| 
 
|alice|2015-04-23|  10| 
 
+-----+----------+--------+ 
 
b.show() 
 
+------+----------+--------+ 
 
| name|  date|duration| 
 
+------+----------+--------+ 
 
| bob|2015-01-12|  3| 
 
|alice2|2015-04-13|  10| 
 
+------+----------+--------+

私は何をしようとしていることは同じ名前の持続時間は、時間の合計となります二つの条件 1.Forを適用することによって、一意の行のみを表示するには、2つのデータフレームのマージされています。 2.同じ名前の場合、最終日は最新の日付になります。


 

 
Final output will be 
 
final.show() 
 
+-------+----------+--------+ 
 
| name |  date|duration| 
 
+----- +----------+--------+ 
 
| bob |2015-01-13|  7| 
 
|alice |2015-04-23|  10| 
 
|alice2 |2015-04-13|  10| 
 
+-------+----------+--------+ 
 

 
I followed the following method. 
 

 
//Take union of 2 dataframe 
 
val df =a.unionAll(b) 
 

 
//group and take sum 
 
val grouped =df.groupBy("name").agg($"name",sum("duration")) 
 

 
//join 
 
val j=df.join(grouped,"name").drop("duration").withColumnRenamed("sum(duration)", "duration") 
 

 
and I got 
 
+------+----------+--------+ 
 
| name|  date|duration| 
 
+------+----------+--------+ 
 
| bob|2015-01-13|  7| 
 
| alice|2015-04-23|  10| 
 
| bob|2015-01-12|  7| 
 
|alice2|2015-04-23|  10| 
 
+------+----------+--------+
どのように私は今の日付を比較して重複を削除することができます。 テーブルとして登録した後にSQLクエリを実行することは可能ですか? 私はSparkSQLの初心者です。私はこの問題に近づくのが奇妙だと感じています。この種のデータ処理を行うためのより良い方法はありますか?

+0

最終結果は何ですか? – mrsrinivas

+0

こんにちはSrini、check final.show() 私は同じ名前の重複行を削除するために、重複行の期間を合計し、日付列に最新の日付のみを表示しています。 –

答えて

0

max(date)groupBy()にすることができます。 joingroupeddfとする必要はありません。

// In 1.3.x, in order for the grouping column "name" to show up, 
val grouped = df.groupBy("name").agg($"name",sum("duration"), max("date")) 

// In 1.4+, grouping column "name" is included automatically. 
val grouped = df.groupBy("name").agg(sum("duration"), max("date")) 
+0

ありがとうございました。 私は、テーブルに他の列がある場合、時間と日付のフィールドで計算を実行した後に、それらを最終テーブルにマージする必要があるという結合思考を使用しようとしました。 –

関連する問題