spark sql一个强大之处就是能够嵌在编程语言内执行,比如在java或者scala,Python里面,正是因为这样的特性,使得spark sql开发变得更加有趣。 比如我们想做一个简单的交互式查询,我们可以直接在linux终端直接执行spark sql查询hive来分析,也可以开发一个jar来完成特定的任务。
有些时候单纯的使用sql开发可能功能有限,比如我有下面的一个功能:
一张大的hive表里面有许多带有日期的数据,现在一个需求是能够把不同天的数据分离导入到不同天的es索引里面,方便按时间检索,提高检索性能。
有几种方式可以完成:
(1)写一个MapReduce程序,遍历这个表每一条数据,插入到es里面。
(2)使用Hive按日期分区,生成n个日期分区表,再借助es-hadoop框架,通过shell封装将n个表的数据批量导入到es里面不同的索引里面
(3)使用Scala+Spark SQL读取Hive表按日期分组,然后借助es-hadoop框架把每一组的数据导入es里面。
优缺点:
方式一:开发量最大,导入性能最差
方式二:开发量次之,导入性能一般
方式三:开发量小,性能最优
总结分析:
方式一:
直接使用MapReduce读取表数据,然后每一行add一次,插入性能非常低效,有人会说可以批使用list批量插入,但是不要忘记我们现在是每一天的数据插入到不同的索引里面,一个list是不能放不同日期的数据,所以如果想要批量还要维护一个不同日期的list,并放在Map里面,最后提交完清空集合,整体复杂度增加而且维护调试都比较麻烦。
方式二:
直接使用Hive,提前将数据构建成多个分区表,然后借助官方的es-hadoop框架,直接将每一个分区表的数据,导入到对应的索引里面,这种方式直接使用大批量的方式导入,性能比方式一好,但由于Hive生成多个分区表以及导入时还要读取每个分区表的数据涉及的落地IO次数比较多,所以性能一般
方式三:
在scala中使用spark sql操作hive数据,然后分组后取出每一组的数据集合,转化成DataFrame最后借助es-hadoop框架,将每组数据直接批量插入到es里面,注意此种方式对内存依赖比较大,因为最终需要将数据拉回spark的driver端进行插入操作。
关于方式一和方式二就不再细说了,有兴趣的朋友可以自己尝试下,下篇文章会把基于第三种方式实现的例子分享出来,可以直接在spark的local模式下模拟运行。
分享到:
相关推荐
这是一个基于Scala语言开发的Spark RDD、Spark SQL、Spark Streaming相关Demo,包含35个文件。主要文件类型包括29个Scala源文件、2个Markdown文档、1个Reduced文件、1个XML文件、1个Java源文件和1个TXT文件。该项目...
通用load/write方法 手动指定选项 Spark SQL的DataFrame接口支持多种数据源的操作。... Spark SQL的默认数据源为Parquet格式。数据源为Parquet文件时,...scala> val df = spark.read.load(hdfs://hadoop001:9000/nam
包中构建了Java以及Scala混合框架的maven打包框架以及关于spark core,spark sql 、spark streaming的一些典型案例或者算子使用。
scala sdk-2.12 与spark版本冲突,spark-1.6最高支持scala sdk-2.10.x版本
spark-recommender, 在 Scala 中使用 Apache Spark 框架,编写了可以扩展的推荐系统 火花推荐采用 Scala 框架编写的可以扩展推荐系统,使用了 Apache Spark 框架。实现的算法包括:k-最近邻居带聚类的k-近邻带簇树的...
Scala和Spark大数据分析函数式编程、数据流和机器学习
本资源收集了scala与大数据spark的基础的学习笔记,有兴趣的同学可以下载学习
本资源提供了一套基于Scala的Apache Spark相关RDD、SQL、Streaming Demos的设计源码,包含35个文件,其中包括29个Scala源代码文件,2个Markdown文档,1个Reduced文件,1个XML配置文件,1个Java源代码文件,以及1个...
基于Spark1.6,使用Spark SQL框架和sqlite数据库,把唐诗三百首,宋诗三百首和元明清诗精选导入数据库,可以按来源,体裁及作者,方便地查出诗句或试题中包含某个关键字的作品,还可以在选中作品后,进行五绝,七绝...
scala和spark的安装和配置,以及启动spark,分发节点。
sparknotebook, 在ipython中,使用 Scala 运行 Apache Spark的例子 sparknotebook重要我正处于删除 IScala的过程中,因为它的开发出现停滞。 我正在用 jupyter 替换它。 ,jupyter-scala还没有为 Scala 2.10构建。 ...
Scala and Spark for Big Data Analytics by Md. Rezaul Karim English | 25 July 2017 | ISBN: 1785280848 | ASIN: B072J4L8FQ | 898 Pages | AZW3 | 20.56 MB Harness the power of Scala to program Spark and ...
scala与spark文档合集,有好多本,包括快学Scala,scala与spark文档合集
原始用的jetty做的http接口,最近有时间,研究了下spring boot + scala + spark做大数据计算
采用ARIMA模型(自回归积分滑动平均模型)+三次指数平滑法(Holt-Winters),用scala语言实现的在spark平台运行的分布式时间序列预测算法
2:兼容java,在scala中可以直接调用java方法。 2:函数式编程,柯里化函数,匿名函数,高阶函数等。 3:代码行简单。 4:支持并发控制,Actor Model机制 5:目前比较流行的kafka,spark均由scala开发。
Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用
这是一个基于Scala的Apache Spark大数据处理设计,使用Scala、Java、Python、Shell、JavaScript、CSS、HTML、Ruby和C语言开发,包含14108个文件。主要文件类型包括3966个Scala文件、1559个Q文件、1004个TXT文件、961...
本项目基于Scala开发,包含148个文件,包括Scala源代码、CRC校验文件、TXT文本文件、以及多个...系统实现了基于Scala的Spark_Core、Spark_SQL和Spark_Streaming功能,界面友好,功能完善,适合用于大数据处理和分析。
本源码项目是基于Scala的Apache Spark REST作业服务器设计,包含343个文件,主要使用Scala、Shell、Python、JavaScript、Java、CSS和HTML编程语言。该项目是一个为Apache Spark设计的REST作业服务器,旨在提供一种...