mysql parquet_Spark与Apache Parquet
七十年代时,有一长辈连练铁砂掌,功夫成了之后,可以掌断五砖,凌空碎砖,威风得不得了。时至八十年代,只能掌断三砖。到九十年代只能一砖一砖的断了。他说,一直以为功力退步了,后来才知道烧砖的配方改了。
数据压缩
前言
前两篇将了spark的部署和一些简单的实例Spark初体验(步骤超详细)和Spark再体验之springboot整合spark。我相信前两篇会对刚入门的sparker来说会有一些启发。
今天在使用spark去加载200万条数据的时候,服务器提示内存分配不足(服务器配置较低),这里我就在想有没有什么方法将数据压缩压缩再压缩呢?网上查资料,问他人,最后看到并使用了Apache Parquet官网,这里简单的介绍一下parquet
Parquet
Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目.
当时Twitter的日增数据量达到压缩之后的100TB+,存储在HDFS上,工程师会使用多种计算框架(例如MapReduce, Hive, Pig等)对这些数据做分析和挖掘;日志结构是复杂的嵌套数据类型,例如一个典型的日志的schema有87列,嵌套了7层。所以需要设计一种列式存储格式,既能支持关系型数据(简单数据类型),又能支持复杂的嵌套类型的数据,同时能够适配多种数据处理框架。
通过阅读这篇文章,相信你会对parquet的优点有所了解。
网上关于它的介绍和算法的讲解一大推,简单的讲使用parquet存储数据有以下优点:
压缩数据
不失真
减少IO吞吐量
高效的查询
更重要的是spark和parquet简直是绝配,犹如小葱拌豆腐、京酱肉丝陪面皮、手擀面配大蒜。。。
示例
老规矩,先上pom
...
1.7.0
...
org.apache.parquet
parquet-common
${parquet.version}
org.apache.parquet
parquet-encoding
${parquet.version}
org.apache.parquet
parquet-column
${parquet.version}
org.apache.parquet
parquet-hadoop
${parquet.version}
下面使用spark对mysql的一张表做parquet的读写操作
将整张表的数据存储为parquet格式的文件
static String url = "jdbc:mysql://localhost:3306/world?" +
"useUnicode=true&characterEncoding=UTF-8" +
"&zeroDateTimeBehavior=convertToNull";
static String table = "jd_trainingdata";
static String username = "root";
static String passwd = "root";
private static void parquetWrite() {
SparkConf conf = new SparkConf()
.setAppName("test")
.setMaster("local")
.set("spark.executor.memory", "8g")
.set("spark.rdd.compress true","true")
.set("spark.testing.memory", "2147480000");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc);
sqlContext.setConf("spark.sql.dialect", "sql");
Properties connectionProperties = new Properties();
connectionProperties.put("driver","com.mysql.jdbc.Driver");
connectionProperties.put("user", username);
connectionProperties.put("password", passwd);
DataFrame vectorTable = sqlContext.read().jdbc(url, table,connectionProperties);
vectorTable.saveAsParquetFile("jdData");// 在项目里生成文件,当然你也可以写绝对路径
}
结果为
parquet包含的文件
关于内容我没有去深究(官网有详细的解释说明),但是能看得出文件是成功的生成了~
那么接下来看看如何去读parquet的文件内容
private static void parquetRead() {
SparkConf conf = new SparkConf()
.setAppName("test")
.setMaster("local[4]")
.set("spark.executor.memory", "8g")
.set("spark.rdd.compress true","true")
.set("spark.testing.memory", "2147480000");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc);
sqlContext.parquetFile("jdData").registerTempTable("jdData");
DataFrame dbaClos = sqlContext.sql("select * from jdData where Title = 'DBA' and Title <> '' ");
dbaClos.show();
}
运行日志
日志
当你拿到sqlContext的时候,你就可以使用spark提供的sql去查找你想要的数据,要提醒一下, spark支持的sql跟mysql,oracle的不太一样,详细参考官网帮助文档
后续
这里说一下我为什么使用parquet,我现在测试服务器的内存是16g,项目在启动的时候需要加载其他的模型、数据等文件,而且数据虽然才有220多万条,但是存储的内容比较多,所以就会导致内存不足,使用了parquet之后,数据大小直接被压缩为原来的三分之一!!!而且spark对parquet文件的支持近乎完美,所以使用parquet之后,我完全可以不用考虑内存分配不足的问题了。
mysql parquet_Spark与Apache Parquet相关推荐
- apache php mysql下载_linux+apache+php+mysql 安装
到www.mysql.com , www.apache.org , www.php.net下载mysql,apache,php的最新源码包 mysql-standard-5.0.1-alpha-sna ...
- ERROR queue.BoundedInMemoryExecutor: error producing records0] org.apache.parquet.io.ParquetDecoding
文章目录 1 错误重现 2 出现原因以及解决 3 对Dataframe使用union时的问题 1 错误重现 ERROR queue.BoundedInMemoryExecutor: error pro ...
- Apache Parquet 技术干货分享
Parquet 是一种面向分析的.通用的列式存储格式,兼容各种数据处理框架比如 Spark.Hive.Impala 等,同时支持 Avro.Thrift.Protocol Buffers 等数据模型. ...
- Apache parquet介绍
什么是parquet parquet是为了数据的高性能存储和索取而生的列式数据存储格式,同时parquet提供了高效的数据压缩和编码方案来增强处理复杂数据块的性能. Reference: what-i ...
- Apache Parquet
作者:翁松秀 Apache Parquet is a columnar storage format available to any project in the Hadoop ecosystem, ...
- Apache Parquet 干货分享
最近一个月被两个小主折磨得七荤八素的,真是一对甜蜜的负担.生活还要继续,最近先转几篇高质量的文章,后续要恢复写作了,大家有什么想看的,可以私信我. -------------------------- ...
- sqoop mysql parquet_Sqoop抽取Hive Parquet表数据到MySQL异常分析
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. Fayson的github:https://github.com/fayson/cdhproject 1.问题描述 在CDH集群中我们需 ...
- apache mysql 连接数 winnt,APACHE PHP MYSQL PHPMYADMIN超详细配置教程
Apache+PHP+MySQL+phpMyAdmin超详细配置教程 安装之前需要下载 Apache2.0.59 PHP4.4.4Win32 MySQL4.12 phpMyAdmin2.9.1.1rc ...
- ubuntu apache php mysql phpmyadmin_Ubuntu下Apache+PHP+MySQL+phpMyAdmin的快速安装步骤
Ubuntu下是如何部署安装 Apache +PHP+MySQL+phpMyAdmin的呢?对于很多朋友来说可能会有点不熟悉,下面这篇文章我将给大家带来Ubuntu下快速部署安装Apache+PHP+ ...
最新文章
- 思维dp ---- Codeforces Round #722 (Div. 1) B. Kavi on Pairing Duty [思维dp + 数学]
- 谷歌最新黑科技:裸眼3D视频通话,宛如真人面对面!Jeff Dean:魔镜啊魔镜
- 资深猎头揭露:他们为何能年薪百万?
- 主成分分析降维(MNIST数据集)
- python中select模块_基于python select.select模块通信的实例讲解 如何用python写个串口通信的程序...
- led设备驱动(s3c_led.c)
- Java编程:KMP算法
- google font 字体下载方式
- 计算机专业搜题软件免费,QuestionHelper(pc搜题工具)
- 《上海悠悠接口自动化平台》-3.流程性用例,有关联的接口如何写?
- 51单片机99秒倒计时C语言程序,单片机课程设计-99秒倒计时
- 买书排序问题-------C语言算法
- python 小海龟 教案_幼儿园小班健康活动《勇敢的小海龟》教案
- 工作表保护密码忘了怎么办?
- Netlogon特权提升漏洞
- jacob 字体设置
- AndroidManifest配置文件介绍
- 三重积分的C语言验算
- 淘宝(客户端)上的店家里面的视频是如何下载的
- intel 服务器芯片组 c6,Intel 10nm至强主板偷跑:型号“IMB700” 基于C621A芯片组
热门文章
- java pmd checkstyle_提高代码质量 CheckStyle FindBugs PMD
- 官方海康RTSP取流URL格式
- Opencv cvCircle()函数
- opencv 绘图 cvLine cvRectangle cvCircle cvEllipse cvEllipseBox cvFillPoly cvConvexPoly cvPolyLine
- SAGANPose | 隐式结构化对抗人体姿态估计网络
- vb.net 教程 20-4 库存管理系统3.9 入库管理(FormStorageIn)
- 基于量产的乘用车高速自动驾驶系统开发
- C罗,一个关于坚持的故事
- OCaml 安装以及简单的加减乘除Demo(以Ubuntu16.04为例)
- 深入理解TCP三次握手四次挥手