如何在spark数据帧中标记一组行中的行

时间:2017-02-12 10:24:05

标签: scala apache-spark spark-dataframe

您好我想根据一些规则从记录组中标记一行。我有一个如下的数据框

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)开始,第一组基于最高价格,第二条基于最近日期。我的实际规则更复杂,涉及很多其他专栏也是。

解决这类问题的最佳方法是什么。需要根据一些规则从一组行中选择一行。任何帮助将不胜感激。感谢

1 个答案:

答案 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|
+---+-----+----+