七十年代时,有一长辈连练铁砂掌,功夫成了之后,可以掌断五砖,凌空碎砖,威风得不得了。时至八十年代,只能掌断三砖。到九十年代只能一砖一砖的断了。他说,一直以为功力退步了,后来才知道烧砖的配方改了。

数据压缩

前言

前两篇将了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相关推荐

  1. 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 ...

  2. ERROR queue.BoundedInMemoryExecutor: error producing records0] org.apache.parquet.io.ParquetDecoding

    文章目录 1 错误重现 2 出现原因以及解决 3 对Dataframe使用union时的问题 1 错误重现 ERROR queue.BoundedInMemoryExecutor: error pro ...

  3. Apache Parquet 技术干货分享

    Parquet 是一种面向分析的.通用的列式存储格式,兼容各种数据处理框架比如 Spark.Hive.Impala 等,同时支持 Avro.Thrift.Protocol Buffers 等数据模型. ...

  4. Apache parquet介绍

    什么是parquet parquet是为了数据的高性能存储和索取而生的列式数据存储格式,同时parquet提供了高效的数据压缩和编码方案来增强处理复杂数据块的性能. Reference: what-i ...

  5. Apache Parquet

    作者:翁松秀 Apache Parquet is a columnar storage format available to any project in the Hadoop ecosystem, ...

  6. Apache Parquet 干货分享

    最近一个月被两个小主折磨得七荤八素的,真是一对甜蜜的负担.生活还要继续,最近先转几篇高质量的文章,后续要恢复写作了,大家有什么想看的,可以私信我. -------------------------- ...

  7. sqoop mysql parquet_Sqoop抽取Hive Parquet表数据到MySQL异常分析

    温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. Fayson的github:https://github.com/fayson/cdhproject 1.问题描述 在CDH集群中我们需 ...

  8. apache mysql 连接数 winnt,APACHE PHP MYSQL PHPMYADMIN超详细配置教程

    Apache+PHP+MySQL+phpMyAdmin超详细配置教程 安装之前需要下载 Apache2.0.59 PHP4.4.4Win32 MySQL4.12 phpMyAdmin2.9.1.1rc ...

  9. ubuntu apache php mysql phpmyadmin_Ubuntu下Apache+PHP+MySQL+phpMyAdmin的快速安装步骤

    Ubuntu下是如何部署安装 Apache +PHP+MySQL+phpMyAdmin的呢?对于很多朋友来说可能会有点不熟悉,下面这篇文章我将给大家带来Ubuntu下快速部署安装Apache+PHP+ ...

最新文章

  1. 思维dp ---- Codeforces Round #722 (Div. 1) B. Kavi on Pairing Duty [思维dp + 数学]
  2. 谷歌最新黑科技:裸眼3D视频通话,宛如真人面对面!Jeff Dean:魔镜啊魔镜
  3. 资深猎头揭露:他们为何能年薪百万?
  4. 主成分分析降维(MNIST数据集)
  5. python中select模块_基于python select.select模块通信的实例讲解 如何用python写个串口通信的程序...
  6. led设备驱动(s3c_led.c)
  7. Java编程:KMP算法
  8. google font 字体下载方式
  9. 计算机专业搜题软件免费,QuestionHelper(pc搜题工具)
  10. 《上海悠悠接口自动化平台》-3.流程性用例,有关联的接口如何写?
  11. 51单片机99秒倒计时C语言程序,单片机课程设计-99秒倒计时
  12. 买书排序问题-------C语言算法
  13. python 小海龟 教案_幼儿园小班健康活动《勇敢的小海龟》教案
  14. 工作表保护密码忘了怎么办?
  15. Netlogon特权提升漏洞
  16. jacob 字体设置
  17. AndroidManifest配置文件介绍
  18. 三重积分的C语言验算
  19. 淘宝(客户端)上的店家里面的视频是如何下载的
  20. intel 服务器芯片组 c6,Intel 10nm至强主板偷跑:型号“IMB700” 基于C621A芯片组

热门文章

  1. java pmd checkstyle_提高代码质量 CheckStyle FindBugs PMD
  2. 官方海康RTSP取流URL格式
  3. Opencv cvCircle()函数
  4. opencv 绘图 cvLine cvRectangle cvCircle cvEllipse cvEllipseBox cvFillPoly cvConvexPoly cvPolyLine
  5. SAGANPose | 隐式结构化对抗人体姿态估计网络
  6. vb.net 教程 20-4 库存管理系统3.9 入库管理(FormStorageIn)
  7. 基于量产的乘用车高速自动驾驶系统开发
  8. C罗,一个关于坚持的故事
  9. OCaml 安装以及简单的加减乘除Demo(以Ubuntu16.04为例)
  10. 深入理解TCP三次握手四次挥手