如何为Spark sql中的窗口函数修复错误不匹配的输入'partition'?

问题描述 投票:0回答:1

我想在Spark SQL中运行窗口函数。我让Zeppelin坐在Hadoop的Spark集群的顶部。

我想在表中添加行号,并通过两个ID的组合对其进行分组。

这是我的数据。

food      aisle      item    date_added
pear      1          1234    '2020-01-01 10:12'
banana    2.         1233    '2020-01-02 10:12'
banana    2          1211    '2020-01-03 10:12'
banana    2          1412    '2020-01-04 10:12'
apple     1          1452    '2020-01-05 10:12'
apple     1          1334    '2020-01-06 10:12'

我想将数据转换为此

food      aisle      item    date_added             rn
pear      1          1234    '2020-01-01 10:12'     1
banana    2          1233    '2020-01-02 10:12'     3
banana    2          1211    '2020-01-03 10:12'     2
banana    2          1412    '2020-01-04 10:12'     1
apple     1          1452    '2020-01-05 10:12'     2
apple     1          1334    '2020-01-06 10:12'     1

这是我的查询

%sql

select
    food,
    aisle,
    item,
    row_number() over (order by date_added desc 
                            partition by food, aisle 
                            rows between unbounded preceeding and current row) as rn
from fruits

这是错误

mismatched input 'partition' expecting {')', ',', 'RANGE', 'ROWS'}(line 5, pos 28)

如何使用Spark SQL解决此错误?

sql apache-spark apache-spark-sql apache-zeppelin
1个回答
1
投票

正确的语法是:

row_number() over (partition by food, aisle order by date_added desc) as rn 

等级功能(row_number()rank()dense_rank())不需要窗框规格。

© www.soinside.com 2019 - 2024. All rights reserved.