【发布时间】:2020-04-22 01:18:55
【问题描述】:
我有以下数据框,
+----+-----+----+--------+
|year|month|item|quantity|
+----+-----+----+--------+
|2019|1 |TV |8 |
|2019|2 |AC |10 |
|2018|1 |TV |2 |
|2018|2 |AC |3 |
+----+-----+----+--------+
通过使用窗口函数,我想得到下面的输出,
val partitionWindow = Window.partitionBy("year").orderBy("month")
val itemsList= collect_list(struct("item", "quantity")).over(partitionWindow)
df.select("year", itemsList as "items")
Expected output:
+----+-------------------+
|year|items |
+----+-------------------+
|2019|[[TV, 8], [AC, 10]]|
|2018|[[TV, 2], [AC, 3]] |
+----+-------------------+
但是,当我使用窗口功能时,每个项目都有重复的行,
Current output:
+----+-------------------+
|year|items |
+----+-------------------+
|2019|[[TV, 8]] |
|2019|[[TV, 8], [AC, 10]]|
|2018|[[TV, 2]] |
|2018|[[TV, 2], [AC, 3]] |
+----+-------------------+
我想知道删除重复行的最佳方法是什么?
【问题讨论】:
-
更正了数据集中的错误
-
您可以使用
unbounded window上的last函数进行过滤。或获取row_number(),然后获取max的row_number进行过滤。 -
实际上是一个非常好的问题,我对 1issue 的非 udf 解决方案
-
贴了一个UDF很简单的答案。
标签: dataframe apache-spark apache-spark-sql