roaringbitmap java,数据结构-RoaringBitmap概要
Published: 2019-12-14 18:18:00
tags: Flink
1.Bitmap
Bitmap索引在数据库和搜索引擎里使用的很广泛,
BitMap使用bit位,来标记元素对应的Value, 而Key即是该元素
Bitmap索引一般用来存储整数。整数的范围是0~2^32-1
bitmap算法- 精确去重算法主要通过BitMap来实现,它本质上是定义了一个很大的 bit 数组,每个元素对应到 bit 数组的其中一位
2.RoaringBitmap
RoaringBitmap中,32位整数被分成了2^16个块。
任何一个32位整数的
前16位决定放在哪个块里
后16位就是放在这个块里的内容
对于非Integer类型的数据(比如String类型),可以通过数据字典映射成Integer
3.开源的源代码
org.roaringbitmap.RoaringBitmap;
RoaringArray highLowContainer;
//RoaringBitmap中都包含一个 RoaringArray 名字叫 highLowContainer 。
//highLowContainer 存储了 RoaringBitmap 中的全部数据
short[] keys; //高16位会被作为key存储到, //keys数组永远保持有序,方便二分查找,且不会存储重复数值
Container[] values;//低16位则被看做value
int size; //size则标示了当前包含的key-value pair的数量,即keys和values中有效数据的数量
02. Roaring bitmap共有三种不同类型的Container, 分别是Array Container, Bitmap Container, Run Container.
ArrayContainer <= 4096 elements:
数组的初始长度为DEFAULT_INIT_SIZE = 4,扩容的规则
不会分配超过DEFAULT_MAX_SIZE = 4096大小的capacity
BitmapContainer >= 61140 elements:
RunContainer others
03.主要的操作
主要使用 add remove
and or xor
serialize deserialize 等操作
4.使用示例
01.maven依赖
org.roaringbitmap
RoaringBitmap
0.8.6
02.代码
import org.roaringbitmap.RoaringBitmap;
public class ResBitMap {
public static void main(String[] args){
//向rr中添加1、2、3、1000四个数字
RoaringBitmap rr = RoaringBitmap.bitmapOf(1,2,3,1000);
//创建RoaringBitmap rr2
RoaringBitmap rr2 = new RoaringBitmap();
//向rr2中添加10000-12000共2000个数字
rr2.add(10000L,12000L);
//返回第3个数字是1000,第0个数字是1,第1个数字是2,则第3个数字是1000
System.out.println(rr.select(3));
//返回value = 2 时的索引为 1。value = 1 时,索引是 0 ,value=3的索引为2
System.out.println( rr.rank(2));
//判断是否包含1000
System.out.println( rr.contains(1000));
//判断是否包含7 // will return false
System.out.println( rr.contains(7));
//两个RoaringBitmap进行or操作,数值进行合并,合并后产生新的RoaringBitmap叫rror
RoaringBitmap rror = RoaringBitmap.or(rr, rr2);
//rr与rr2进行位运算,并将值赋值给rr
rr.or(rr2);
//判断rror与rr是否相等,显然是相等的
boolean equals = rror.equals(rr);
if(!equals) {throw new RuntimeException("bug");}
// 查看rr中存储了多少个值,1,2,3,1000和10000-12000,共2004个数字
long cardinality = rr.getLongCardinality();
System.out.println(cardinality);
//遍历rr中的value
for(int i : rr) {
System.out.println(i);
}
}
}
其他
01.BitMap 运营分析-任意两天的重叠活跃用户
对不同日期活跃用户ID进行bitmap编码和计算的
获取过去1天的日活跃用户bitmap和今天的bitmap,对它们做并集(Union),and等操作
Bitmap和布隆过滤器(Bloom Filter)两个算法,对于空间的利用到达了一种极致
02.布隆过滤器就是引入了k(k>1) k(k>1)k(k>1)个相互独立的哈希函数,保证在给定的空间、误判率下,完成元素判重的过程,适合与比Bitmap更多量的数据 .stat()
DataFrameStatFunctions
bloomFilter 布隆过滤器
countMinSketch 算法Count-Min Sketch
corr : 计算the Pearson Correlation Coefficient of two columns of a DataFrame.
03. HyperLogLog算法经常在数据库中被用来统计某一字段的Distinct Value -- 在需要对数据进行去重计数的场景里
JavaRDDLike countApproxDistinct
def countApproxDistinct(relativeSD: Double): Long = rdd.countApproxDistinct(relativeSD)。
It must be greater than 0.000017.
统计是一个大约的统计,参数relativeSD控制统计的精确度。relativeSD越小,结果越准确
APPROX_COUNT_DISTINCT
5.参考:
BitMap、RoaringBitmap与JavaEWAH https://www.cnblogs.com/fonxian/p/10937882.html
精确去重和Roaring BitMap https://blog.csdn.net/hfcenter/article/details/95458754
Filter 过滤 http://muziyuchen.com/spark-ii-14/
http://dyingbleed.com/ 李震的个人博客
BitMap与RoaringBitmap、JavaEWAH https://blog.csdn.net/weixin_42142408/article/details/89426499
roaringbitmap java,数据结构-RoaringBitmap概要相关推荐
- roaringbitmap java,BitMap、RoaringBitmap与JavaEWAH
本文主要介绍BitMap的算法思想,以及开源工具类JavaEWAH.RoaringBitmap的简单用法. 一.BitMap 介绍 BitMap使用bit位,来标记元素对应的Value.该算法能够节省 ...
- java数据结构与算法之顺序表与链表深入分析
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...
- java数据结构与算法之双链表设计与实现
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: java数据结 ...
- java队列_如何彻底搞懂 Java 数据结构?CSDN 博文精选
作者 | 张振华.Jack 责编 | 郭芮 出品 | CSDN 博客 本文和大家一起来重温<Java数据结构>经典之作. Java数据结构 要理解Java数据结构,必须能清楚何为数据结构? ...
- Java 数据结构与算法系列之冒泡排序
一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...
- Java数据结构与算法——树(基本概念,很重要)
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...
- java数据结构 队列_Java数据结构与算法[原创]——队列
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本文介绍数据结构中的队列(queue)的概念.存储结构.队列的特点,文末给出ja ...
- 数据结构 python的书推荐-java数据结构书一般推荐看什么好?
想要学习java的各种数据结构,一本良好的书籍会让你受益匪浅,本文就来推荐一些学习java数据结构适合看的书. 一.入门推荐 因为是入门,所以我们先不要求实现,阅读一些通过图片,打比方等通俗易懂的方法 ...
- Java数据结构与算法——插入排序
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
最新文章
- php学习,一个简单的Calendar(2) 一个简单的活动页面
- 1.arm的linux系统搭建
- 关于ERP、MES、SFC问题
- 卓京计算机学校,卓京--计算机数据原理课程设计任务书.doc
- SVN使用log,list,cat,diff命令查看特定文件版本信息
- android的rgb转bitmap,Android: 格式为RGB_565的bitmap问题
- 为什么matlab显示error,【求救】我安装了资源 MATLAB R2012b 后,显示有error……
- React开发(139):ant design学习指南之下载文件
- (原)PyTorch中使用指定的GPU
- Hive是如何让MapReduce实现SQL操作的?
- [Comet OJ - Contest #7 D][52D 2417]机器学习题_斜率优化dp
- uniapp同步获取用户信息_表单设计是为了帮助用户获取信息,而不是填写
- 秋招开始,求职别慌!C 认证了解一下!
- 怎么利用c 语言编程进行进制计算,编程达人 《汇编、C语言基础教程》第一章 进制1.1 进制的定义(连载)...
- 【实习】量化研究员-机器学习-Akuna Capital-美国金融交易公司
- Google Play 注册开发者注意事项
- 第21章 DHCP
- tkinter做界面的一点心得(丑而简单)
- Oracle递归的实现
- Kaggle手机验证manually verified