首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
今天 16:20
吉林大学 测试工程师
面试手撕题总结
看前须知 岗位均为测试/测开 包含暑期和秋招 不区分一二面,以公司为独立单元 笔者亲身经历,真实有效 好未来 给一个字符串,包含空格和数字,删除之后判断是否会回文串 全排列 美团 合并数组 字符串相加 快手 最长无重复子串长度 百度 逆序字符串,力扣151 智叟科技 判断是否是对称二叉树 阿里虎鲸文娱 罗马数字转换 招银网络科技 现场出的题,一个简单的模拟,把一个字符串中所有的数字都*2 a12d3 -- > a24d6 CVTE 快排 字节跳动 合并重叠区间 米哈游 版本号比较 网易云 最大连续子数组和 目前记得的 就这些了,后续想起来...
查看13道真题和解析
点赞
评论
收藏
分享
2025-12-29 16:53
新易盛_数据系统部_数据中心系统工程师(准入职员工)
小天才内推,小天才内推码
小天才26秋招分享(三面凉经)tl:9.13投递-10.10自主约面-10.10一面-10.11上传作品集-10.14二面-10.16三面(交叉面) 一面:线上邮件通知选择具体面试时间段(大约20mins)面试官问题1. 请先做一个自我介绍(1分钟左右)。2. 简历项目追问3. 在校期间有获得哪些奖学金吗?4. 有挂过科吗?5. 学得最好的课程是哪些?6. 分享一个人力资源领域中你觉得很重要的知识点。7. 根据以上追问若干问题8. 结合实习经历,招聘的具体成果是你直接负责的社招岗位吗?9. 你的导师对你的工作评价是什么样的?10.追问11.综合实习经历,你目前更适合做人力哪个方向的工作?12....
点赞
评论
收藏
分享
2025-12-03 19:12
广东海洋大学 Java
27届双非大三求拷打,想找寒假实习
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
都 2026 年了,还在神话 AI Agent开发吗?
3421
2
...
为什么你的实习是“无效实习”?又该如何做
2971
3
...
千里智驾毁约
2370
4
...
双非终于上岸了!!!!
2037
5
...
据说字节实习大涨薪,非技术都涨到350了
1743
6
...
uu们,面试的时候一定要大大方方的啊!
1615
7
...
25届试用期被迫离职
1368
8
...
帕斯亚科技UE客户端面经
1364
9
...
简历求锐评,211硕士找实习
1260
10
...
第一次感受到世界上有些人真的有优越感
1185
创作者周榜
更多
正在热议
更多
#
你不能接受的企业文化有哪些
#
862次浏览
24人参与
#
应届生第一份工作最好去大厂吗?
#
123048次浏览
1082人参与
#
有深度的简历长什么样?
#
679次浏览
14人参与
#
非技术er求职现状
#
126814次浏览
771人参与
#
入职第一天
#
576次浏览
11人参与
#
工作后会跟朋友渐行渐远吗
#
54677次浏览
398人参与
#
CVTE工作体验
#
17193次浏览
39人参与
#
帆软软件工作体验
#
8483次浏览
34人参与
#
双非本科的出路是什么?
#
191821次浏览
1514人参与
#
运营/市场/管培生岗位评价
#
28845次浏览
179人参与
#
小米求职进展汇总
#
997150次浏览
6498人参与
#
秋招想进国企该如何准备
#
119568次浏览
599人参与
#
百度工作体验
#
297668次浏览
2214人参与
#
搜狐工作体验
#
2804次浏览
22人参与
#
春招前还要继续实习吗?
#
14223次浏览
153人参与
#
对2025年忏悔
#
11635次浏览
194人参与
#
秋招感动瞬间
#
111632次浏览
507人参与
#
每个月的工资都是怎么分配的?
#
81885次浏览
666人参与
#
你实习是赚钱了还是亏钱了?
#
97590次浏览
587人参与
#
我的上岸简历长这样
#
756552次浏览
11280人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务