python实现sql窗口函数

当使用Presto查询大数据时,由于内存限制,使用row_number()over()等窗口函数可能导致崩溃。解决方案是利用Python Pandas的groupby和rank方法进行数据处理。通过设置'ascending'参数进行升序排序,'method'参数选择'first'实现类似row_number()的功能。这种方法可以避免Presto内存溢出,提高大数据查询效率。
摘要由CSDN通过智能技术生成

背景:公司使用presto查询数据,presto使用内存计算,为避免用户运行大sql,导致presto崩溃,数据平台RD设置了单个节点的最大内存限制,使用row_number()over()等窗口函数非常容易超过内存限制,无法运行sql。

解决:用python pandas的groupby和rank进行排序

代码:df.['rank'] = df.groupby(['分组列'])['排序列'].rank(ascending = True , method = 'first')

参数说明:
ascending :
True 升序
False 降序
method :
dense——值相同,排名相同,后面不跳。例如:1,1,1,2,3 等价sql的dense_rank()
first——值相同,排名不同,根据出现顺序。例如:1,2,3,4 等价于sql的row_number()over()
min——值相同,排名相同,向后跳跃。例如:1,2,2,4
max——值相同,排名相同,向后跳跃。例如:1,3,3,4 等价于sql的rank()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值