gpt4 book ai didi

java - Spark Hive - 带窗口函数的 UDFArgumentTypeException?

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:59 25 4
gpt4 key购买 nike

我有以下 df:

+------------+----------------------+-------------------+                                 
|increment_id|base_subtotal_incl_tax| eventdate|
+------------+----------------------+-------------------+
| 1086| 14470.0000|2016-06-14 09:54:12|
| 1086| 14470.0000|2016-06-14 09:54:12|
| 1086| 14470.0000|2015-07-14 09:54:12|
| 1086| 14470.0000|2015-07-14 09:54:12|
| 1086| 14470.0000|2015-07-14 09:54:12|
| 1086| 14470.0000|2015-07-14 09:54:12|
| 1086| 1570.0000|2015-07-14 09:54:12|
| 5555| 14470.0000|2014-07-14 09:54:12|
| 5555| 14470.0000|2014-07-14 09:54:12|
| 5555| 14470.0000|2014-07-14 09:54:12|
| 5555| 14470.0000|2014-07-14 09:54:12|
+------------+----------------------+-------------------+

我正在尝试运行窗口函数:

WindowSpec window = Window.partitionBy(df.col("id")).orderBy(df.col("eventdate").desc());
df.select(df.col("*"),rank().over(window).alias("rank")) //error for this line
.filter("rank <= 2")
.show();

我想要获取的是每个用户的最后两个条目(最后一个为最新日期,但由于它是按降序排序的,所以是前两行):

+------------+----------------------+-------------------+                                 
|increment_id|base_subtotal_incl_tax| eventdate|
+------------+----------------------+-------------------+
| 1086| 14470.0000|2016-06-14 09:54:12|
| 1086| 14470.0000|2016-06-14 09:54:12|
| 5555| 14470.0000|2014-07-14 09:54:12|
| 5555| 14470.0000|2014-07-14 09:54:12|
+------------+----------------------+-------------------+

但我明白了:

+------------+----------------------+-------------------+----+
|increment_id|base_subtotal_incl_tax| eventdate|rank|
+------------+----------------------+-------------------+----+
| 5555| 14470.0000|2014-07-14 09:54:12| 1|
| 5555| 14470.0000|2014-07-14 09:54:12| 1|
| 5555| 14470.0000|2014-07-14 09:54:12| 1|
| 5555| 14470.0000|2014-07-14 09:54:12| 1|
| 1086| 14470.0000|2016-06-14 09:54:12| 1|
| 1086| 14470.0000|2016-06-14 09:54:12| 1|
+------------+----------------------+-------------------+----+

我错过了什么?

[OLD] - 最初,我有一个错误,现在已解决:

WindowSpec window = Window.partitionBy(df.col("id"));
df.select(df.col("*"),rank().over(window).alias("rank")) //error for this line
.filter("rank <= 2")
.show();

然而,这会返回一个错误线程“main”中的异常org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException:一个或
需要更多参数。
对于上面用注释标记的行。我缺少什么?这个错误是什么意思?谢谢!

最佳答案

rank 窗口函数需要一个带有 orderBy 的窗口,子句例如:

WindowSpec window = Window.partitionBy(df.col("id")).orderBy(df.col("payment"));

如果没有订单,它就毫无意义,因此会出现错误。

关于java - Spark Hive - 带窗口函数的 UDFArgumentTypeException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38475706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com