首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
许1诺
哈尔滨华德学院 大数据开发工程师
发布于四川
关注
已关注
取消关注
@三石大数据:
BitMap在数仓领域的应用【面试加分项】
推荐阅读文章列表:大数据开发面试笔记V4.0 || 面试聊数仓第一季 || 小白大数据学习路线 很多人问我:三石兄,简历没什么亮点怎么办,模型优化除了知道mapjoin,其他啥都不知道,那么这篇文章就可以成为你在面试过程中跟面试官谈论的一个亮点!!!1.背景需求:统计8月每种商品类别的购买人数select mer_type, count(distinct uid)from t -- 表t在100G左右where dt between '20230801' and '20230831'group by mer_type背景:这个任务跑了2h仍未跑出结果,就是因为count distinct在大数据量的情况下,性能巨差,于是想要使用bitmap来对其进行优化!2.技术原理2.1 BitMap2.1.1 定义BitMap的基本原理就是用一个bit来标记元素是否存在,因为仅用1个bit来存储一个数据,所以可以大大的节省空间;假设要使用BitMap来存储(1,5,1)这几个数字,如何存储呢?01234567010001002.1.2 使用场景海量数据量下求不重复的整数的个数2.1.3 代码实现以下代码可以直接运行class Bitmap: def __init__(self, size): self.size = size self.bitmap = [0] * ((size + 31) // 32) def set(self, num): index = num // 32 offset = num % 32 self.bitmap[index] |= (1 << offset) def test(self, num): index = num // 32 offset = num % 32 return (self.bitmap[index] & (1 << offset)) != 0def remove_dup(nums): bitmap = Bitmap(len(nums)) res = [] for num in nums: if not bitmap.test(num): bitmap.set(num) res.append(num) return res # 测试nums = [1,2,3,4,1,3]res = remove_dup(nums)print(res) # [1,2,3,4]2.2 RoaringBitMap2.2.1 BitMap的问题不管业务中实际的元素基数有多少,它占用的内存空间都恒定不变数据越稀疏,空间浪费越严重2.2.2 定义将数据的前半部分,即216(这里为高16位)部分作为桶的编号,将分为216=65536个桶,RBM中将这些小桶叫做container存储数据时,按照数据的高16位做为container的编号去找对应的container(找不到就创建对应的container),再将低16位放入该container中所以一个RBM是很多container的集合2.2.3 代码实现import pyroaringdef remove_dup(nums): bitmap = pyroaring.BitMap() res = [] for num in nums: if num not in bitmap: bitmap.add(num) res.append(num)# 测试nums = [1,2,3,4,1,3]res = remove_dup(nums)print(res) # [1,2,3,4]3.案例分析需求:统计8月每种商品类别的购买人数3.1 定义UDF函数import pyroaringfrom pyhive import hivedef remove_dup(nums): bitmap = pyroaring.BitMap() res = [] for num in nums: if num not in bitmap: bitmap.add(num) res.append(num) return len(res)3.2 创建UDF函数CREATE FUNCTION remove_dup(nums array) RETURNS intAS 'SELECT remove_dup(nums) FROM bitmap.py' LANGUAGE PYTHON;3.3 使用UDF函数select mer_type, remove_dup(collect_list(uid))from t -- 表t在100G左右where dt between '20230801' and '20230831'group by mer_type
点赞 8
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-24 15:59
美团_业务研发平台_软件开发(实习员工)
【面经】拼多多 服务端开发暑期实习(已信息确认)
时间线:3.9 笔试3.15 一面3.18 二面3.26 三面4.2 HR 电话面4.16 面试官留联系方式4.24 信息确认,因已有 offer 不推进流程3.15 拼多多一面 50min周六约面,全程共享屏幕,并且白板编程无任何代码提示手撕力扣简单题,合并两个有序链表面试官:能不能从各方面优化?我一看这题还怎么优化?把 dummy 节点去了,然后考虑了一堆边界条件在那改改改,无法调试,面试官不停问“你觉得你这有问题吗?”项目一直聊实习项目,比其他公司聊的差,比蚂蚁聊的好,我耐心的讲着这个解决方案的所有优化点,每讲完一点面试官就沉默一分钟,我真以为网卡了反问面评?写代码,要注意准确性和健壮性...
查看25道真题和解析
点赞
评论
收藏
分享
昨天 12:24
门头沟学院 产品经理
孩子,去玩吧
五一假期,你打算“躺”还是“卷”?
点赞
评论
收藏
分享
03-02 16:31
已编辑
合肥工业大学 golang
26届实习,求点评简历🙏🏻🙏🏻
恳请大家锐评,会看 会改 准备开始投递了在刷八股,算法,go,项目 #听劝,我这个简历该怎么改?# #实习# #go#
卷卷卷卷吃吃吃吃吃:
别听那个二本的,海投就是了,学历好就可以找到,大把研究生转码技术还不如你
听劝,我这个简历该怎么改?
点赞
评论
收藏
分享
03-13 19:09
已编辑
上海大学 电力电子工程师
#嵌入式实习
各位大佬帮忙看下简历,挺劝😖😖
点赞
评论
收藏
分享
04-23 12:44
北京大学 嵌入式软件开发
创维数字
软件薪资15k可以接收吗?base深圳
过去沉迷:
北大去创维吗
怒拒
offer帮选
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
暑期后端高频问题汇总
5.4W
2
...
左手敲代码的程序员,不配拥有offer吗?
3.9W
3
...
大连某小区保安一面
1.7W
4
...
想听实话吗,校招ssp聊聊大厂客户端
9611
5
...
滴滴秋储后端
9524
6
...
北京到底有谁在啊?
7023
7
...
后端简历上最值得写的项目
5570
8
...
美团/饿了么/京东 配送端面经
5048
9
...
拼多多服务端信息确认
4124
10
...
五一别写你那破开源代码了
4092
创作者周榜
更多
正在热议
更多
#
领导秒批的请假话术
#
7943次浏览
51人参与
#
盲审过后你想做什么?
#
11891次浏览
99人参与
#
平安产险科技中心求职汇总
#
247157次浏览
2631人参与
#
五一之后,实习真的很难找吗?
#
41600次浏览
289人参与
#
找工作,行业重要还是岗位重要?
#
5712次浏览
66人参与
#
如果不工作真的会快乐吗
#
100202次浏览
854人参与
#
京东工作体验
#
12861次浏览
90人参与
#
每人推荐一个小而美的高薪公司
#
72702次浏览
1357人参与
#
安克创新求职进展汇总
#
32323次浏览
411人参与
#
考研可以缓解求职焦虑吗
#
19822次浏览
238人参与
#
五一假期,你打算“躺”还是“卷”?
#
19590次浏览
327人参与
#
面试等了一周没回复,还有戏吗
#
114564次浏览
1069人参与
#
如何缓解入职前的焦虑
#
170756次浏览
1263人参与
#
你喜欢工作还是上学
#
36941次浏览
405人参与
#
应届生薪资多少才合理?
#
2944次浏览
24人参与
#
如果有时光机,你最想去到哪个年纪?
#
43016次浏览
765人参与
#
写简历别走弯路
#
713634次浏览
7844人参与
#
牛友们的论文几号送审
#
26981次浏览
621人参与
#
24届的你们现状如何了?
#
64318次浏览
377人参与
#
找工作前vs找工作后的心路变化
#
6984次浏览
64人参与
#
扒一扒那些奇葩实习经历
#
41007次浏览
765人参与
牛客网
牛客企业服务