【发布时间】:2016-12-16 18:57:07
【问题描述】:
我有以下数据:
rowid uid time code
1 1 5 a
2 1 6 b
3 1 7 c
4 2 8 a
5 2 9 c
6 2 9 c
7 2 10 c
8 2 11 a
9 2 12 c
现在我想以这样一种方式过滤数据,以便我可以删除第 6 行和第 7 行,因为对于特定的 uid,我想在代码中只保留一个值为“c”的行
所以预期的数据应该是:
rowid uid time code
1 1 5 a
2 1 6 b
3 1 7 c
4 2 8 a
5 2 9 c
8 2 11 a
9 2 12 c
我正在使用类似这样的窗口功能:
val window = Window.partitionBy("uid").orderBy("time")
val change = ((lag("code", 1).over(window) <=> "c")).cast("int")
这将帮助我们用代码“c”识别每一行。我可以扩展它以过滤掉行以获得预期的数据
【问题讨论】:
-
您能说明一下您的要求吗?是否对于每个 UID,您只想为每个代码保留一行,还是只为代码“c”需要这样做?
标签: scala apache-spark spark-dataframe window-functions