waterdrop(1.5.1版本)增加bitmap类型导数的遇到的问题
1. 背景
背景是想通过最新的 jbdc 来使waterdrop 可以导入bitmap 类型的数据
2. 实施方法
a. 配置文件 adm_dmp_clickhouse_jdbc.conf
spark {# Waterdrop defined streaming batch duration in secondsspark.streaming.batchDuration = 5spark.sql.catalogImplementation = "hive"spark.app.name = "dmp#tranadm.adm_user_id_dist_pre"spark.ui.port = 13000spark.dynamicAllocation.enabled=falsespark.executor.instances = 9spark.executor.cores = 4spark.executor.memory = "28g"spark.default.parallelism=72spark.sql.shuffle.partitions=72spark.dynamicAllocation.enabled=false
}input {hive {pre_sql = "select 'code' as code , label_value as value , from_unixtime(unix_timestamp(dt,'yyyyMMdd'),'yyyy-MM-dd') as dt , cast('123456' AS LONG) , collect_list(cast(id as int)) as id_bitmap from tranadm.adm_audc_user_base_label_string_inner_pro where dt='20221228' and label_name='country' and label_value is not null group by label_value,dt"result_table_name = "adm_dmp_user_id_dist"}
}filter {
}output {clickhousebitmap {save_mode = "overwrite"host = ""${clickhouse_urls}""clickhouse.socket_timeout = 100000database = ""${desc_ck_db}""table = ""${desc_ck_table}""fields = ["code","value","dt","version","id_bitmap"]username = ""password = ""bulk_size = 5000000}
}
b. 代码具体逻辑
collect_list 这个里面存放的是 spark 中arraylist [string] 类型的数据
/*** 将数组转换成bitmap*/private def getBitMapById(list_id: mutable.WrappedArray[Int]): RoaringBitmap = {if (list_id.length == 0) {new RoaringBitmap()} else {var startBitMap = RoaringBitmap.bitmapOf(list_id(0))if (list_id.length > 1) {for (i <- 1 to list_id.length - 1) {startBitMap.add(list_id(i))}}startBitMap}}
private def renderBaseTypeStatement(index: Int,fieldIndex: Int,fieldType: String,item: Row,statement: PreparedStatement): Unit = {fieldType match {case "DateTime" | "Date" | "String" =>statement.setString(index + 1, item.getAs[String](fieldIndex))case "Int8" | "UInt8" | "Int16" | "UInt16" | "Int32" =>statement.setInt(index + 1, item.getAs[Int](fieldIndex))case "UInt32" | "UInt64" | "Int64" =>statement.setLong(index + 1, item.getAs[Long](fieldIndex))case "Float32" => statement.setFloat(index + 1, item.getAs[Float](fieldIndex))case "Float64" => statement.setDouble(index + 1, item.getAs[Double](fieldIndex))case "Decimal" => statement.setBigDecimal(index + 1, item.getAs[BigDecimal](fieldIndex))case "AggregateFunction(groupBitmap, UInt32)" =>{ val value = item.getAs[mutable.WrappedArray[Int]](fieldIndex)val bitmap = getBitMapById(value)statement.setObject(index + 1, ClickHouseBitmap.wrap(bitmap, ClickHouseDataType.UInt32))}case _ => statement.setString(index + 1, item.getAs[String](fieldIndex))}}
3. 遇到的问题
在新版本的jbdc 版本里面用到的是 0.9.10版本的 roaringbitmap
RoaringBitmap-0.9.10.jar
公司spark 集群是 2.4.6 其中 Roarbitmap 是低版本的;缺少高版本用到的方法。
在自己写jdbc spark 写ck 的时候用的是 spark 程序 config 的
--deploy-mode cluster \
--conf spark.executor.userClassPathFirst=true \
--conf spark.driver.userClassPathFirst=true \
--jar /home/xizhi.wu/waterdrop_1_5_1/waterdrop-1.5.1/lib/RoaringBitmap-0.9.10.jar
这样的方式来使spark 程序优先用 高版本的roaringbitmap。
但在sbt 项目中始终没法通过。
waterdrop(1.5.1版本)增加bitmap类型导数的遇到的问题相关推荐
- php各种编码集详解和以及在什么情况下进行使用 发布:mdxy-dxy 字体:[增加 减小] 类型:转载 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 字符集是多个字符的集
php各种编码集详解和以及在什么情况下进行使用 发布:mdxy-dxy 字体:[ 增加 减小] 类型:转载 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符集是多个字符的 ...
- Gdiplus byte *数据转换为Bitmap类型图片
最近在mfc上显示缩略图那样显示采集到的图片,这个用CimageList和CListctrl就可以了,网上有很多这里不细说,但是别忘了初始化Gdiplus: 但是我的相机采集到的就是byte类型的数据 ...
- h5获取android手机版本,Vue.js怎么获取手机系统型号、版本、浏览器类型
Vue.js怎么获取手机系统型号.版本.浏览器类型 发布时间:2020-07-28 11:22:33 来源:亿速云 阅读:161 作者:小猪 这篇文章主要为大家展示了Vue.js怎么获取手机系统型号. ...
- html文档是哪个版本,HTML 简介, 版本和文档类型声明
HTML 简介, 版本和文档类型声明 html(英语: Hypertext Markup Language, 简称: HTML)也叫作超文本标记语言, 是一种用来结构化 web 网页及其内容的标记语言 ...
- mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。 . .
mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的. 例如: id name ...
- KIngcms 5.1版本增加站内链接功能自动给指定关键词加上链接
站内链接功能对SEO的效果还是很不错的,自动给指定的关键词加上指定的链接.而且可以设置优先级.比如对两个词"SEO"和"SEO优化"都设置有站内链接.但在文章中 ...
- java 数组的长度如何增加,用Java动态增加任意类型数组的长度
用Java动态增加任意类型数组的长度 如果你需要动态增加数组大小: public int[] expandArray(int[] a, int size) { if (size < ...
- 如何为file增加文件类型的识别
通过修改/etc/magic能够增加可识别的文件类型 /etc/magic有四个字段: offset data-type value file-type offset 文件中的偏移量,从0开始计算. ...
- mysql版本的索引类型_【mysql】索引 回表 覆盖索引 索引下推
索引类型 索引类型分为主键索引和非主键索引.(一定要牢记,是怎么存储数据的) 主键索引的叶子节点存的是整行数据.在 InnoDB 里,主键索引也被称为聚簇索引(clustered index). 非主 ...
最新文章
- java将一个数字转换为数组_Java 数组
- 工程院院士李德毅:认知的三次革命,类脑的五条启发
- 隔板都被拉去做核酸了?
- Python sorted 和 sort() 的区别
- java实现doc向swf格式的转换 转_java实现doc向swf格式的转换 转
- SpringSecurity权限控制之异常处理方式三
- 试用期这样做更快通过
- C++|Qt工作笔记-C++获取当前系统时间,Qt获取当前系统时间及各标准间转化
- 苹果CMSv10自适应高权重模板源码
- php采到的数据自动修改入库,基于PHP的简单采集数据入库程序【续篇】_php实例...
- “21天好习惯”第一期-13
- 走进C标准库(6)——string.h中函数的实现memchr
- React学习文档阅读(一)
- android 前后台,Android App前后台监控
- java excel通用导入类_java excel 文件导入通用接口
- 图片的单点触摸移动与多点触摸移动缩放
- Apache Flink 零基础入门(四):客户端操作的 5 种模式
- 计算机十六进制是什么意思,2进制和16进制是什么意思?它们之间如何换算?
- 达人实测:天玑1000和骁龙765g哪个好-天玑1000和骁龙765g对比跑分
- 读书笔记:《谁说菜鸟不会数据分析-入门篇》第1-4章