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类型导数的遇到的问题相关推荐

  1. php各种编码集详解和以及在什么情况下进行使用 发布:mdxy-dxy 字体:[增加 减小] 类型:转载 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 字符集是多个字符的集

    php各种编码集详解和以及在什么情况下进行使用 发布:mdxy-dxy 字体:[ 增加 减小] 类型:转载 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符集是多个字符的 ...

  2. Gdiplus byte *数据转换为Bitmap类型图片

    最近在mfc上显示缩略图那样显示采集到的图片,这个用CimageList和CListctrl就可以了,网上有很多这里不细说,但是别忘了初始化Gdiplus: 但是我的相机采集到的就是byte类型的数据 ...

  3. h5获取android手机版本,Vue.js怎么获取手机系统型号、版本、浏览器类型

    Vue.js怎么获取手机系统型号.版本.浏览器类型 发布时间:2020-07-28 11:22:33 来源:亿速云 阅读:161 作者:小猪 这篇文章主要为大家展示了Vue.js怎么获取手机系统型号. ...

  4. html文档是哪个版本,HTML 简介, 版本和文档类型声明

    HTML 简介, 版本和文档类型声明 html(英语: Hypertext Markup Language, 简称: HTML)也叫作超文本标记语言, 是一种用来结构化 web 网页及其内容的标记语言 ...

  5. mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。 . .

    mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的. 例如: id name ...

  6. KIngcms 5.1版本增加站内链接功能自动给指定关键词加上链接

    站内链接功能对SEO的效果还是很不错的,自动给指定的关键词加上指定的链接.而且可以设置优先级.比如对两个词"SEO"和"SEO优化"都设置有站内链接.但在文章中 ...

  7. java 数组的长度如何增加,用Java动态增加任意类型数组的长度

    用Java动态增加任意类型数组的长度 如果你需要动态增加数组大小: public  int[]  expandArray(int[]  a,  int  size)  { if  (size  < ...

  8. 如何为file增加文件类型的识别

    通过修改/etc/magic能够增加可识别的文件类型 /etc/magic有四个字段: offset data-type value file-type offset 文件中的偏移量,从0开始计算. ...

  9. mysql版本的索引类型_【mysql】索引 回表 覆盖索引 索引下推

    索引类型 索引类型分为主键索引和非主键索引.(一定要牢记,是怎么存储数据的) 主键索引的叶子节点存的是整行数据.在 InnoDB 里,主键索引也被称为聚簇索引(clustered index). 非主 ...

最新文章

  1. java将一个数字转换为数组_Java 数组
  2. 工程院院士李德毅:认知的三次革命,类脑的五条启发
  3. 隔板都被拉去做核酸了?
  4. Python sorted 和 sort() 的区别
  5. java实现doc向swf格式的转换 转_java实现doc向swf格式的转换 转
  6. SpringSecurity权限控制之异常处理方式三
  7. 试用期这样做更快通过
  8. C++|Qt工作笔记-C++获取当前系统时间,Qt获取当前系统时间及各标准间转化
  9. 苹果CMSv10自适应高权重模板源码
  10. php采到的数据自动修改入库,基于PHP的简单采集数据入库程序【续篇】_php实例...
  11. “21天好习惯”第一期-13
  12. 走进C标准库(6)——string.h中函数的实现memchr
  13. React学习文档阅读(一)
  14. android 前后台,Android App前后台监控
  15. java excel通用导入类_java excel 文件导入通用接口
  16. 图片的单点触摸移动与多点触摸移动缩放
  17. Apache Flink 零基础入门(四):客户端操作的 5 种模式
  18. 计算机十六进制是什么意思,2进制和16进制是什么意思?它们之间如何换算?
  19. 达人实测:天玑1000和骁龙765g哪个好-天玑1000和骁龙765g对比跑分
  20. 读书笔记:《谁说菜鸟不会数据分析-入门篇》第1-4章

热门文章

  1. Idea做spring项目所遇到的一些问题
  2. Matlab与Arduino车牌识别的完整系统(2)
  3. JAVA——面向对象总结(一)课后习题
  4. 夜光带你走进 前端工程师(四十 jS )
  5. 创新从未止步,远程智能电源管理器适合哪些行业和企业?
  6. Mac安装双系统(win7系统)
  7. 聚焦健康零食?趣拿带你玩转营销!
  8. 【工业相机】【深度1】相机的选择:- 镜头- 详细例子
  9. android的自动布局框架,Android ConstraintLayout 构建自适应界面
  10. 中国画基础学堂:白描读后感