您好我想根据一些规则从记录组中标记一行。我有一个如下的数据框
id price date
a 100 2016
a 200 2016
a 100 2016
b 100 2016
b 100 2015
我的输出数据框应为
id price date
a 200 2016
b 100 2016
在给定的数据框架中,规则基于两列。从ID组(a,b)开始,第一组基于最高价格,第二条基于最近日期。我的实际规则更复杂,涉及很多其他专栏也是。
解决这类问题的最佳方法是什么。需要根据一些规则从一组行中选择一行。任何帮助将不胜感激。感谢
答案 0 :(得分:3)
试试这个。
val df = Seq(("a",100,2016), ("a",200,2016), ("a",100,2016), ("b",100,2016),("b",100,2015)).toDF("id", "price", "date")
df.show
val df1 = df.select($"id", struct($"price", $"date").alias("data")).groupBy($"id").agg(max("data").alias("data")).select($"id", $"data.price", $"data.date")
df1.show
您将获得如下输出。
+---+-----+----+
| id|price|date|
+---+-----+----+
| b| 100|2016|
| a| 200|2016|
+---+-----+----+