spark与Hive的整合入门
SparkSQL和Hive的整合,是一种比较常见的关联处理方式,SparkSQL加载Hive中的数据进行业务处理,同时将计算结果落地回Hive中。
example
idea新建项目,并把hive-site.xml,core-site.xml,hdfs-site.xml文件下载到Resources文件夹下.
读取数据
object HiveDemo extends App{private val session: SparkSession = SparkSession.builder().enableHiveSupport().master("local").appName("hive").getOrCreate()//Returns the specified table/view as a DataFrame.//将hive的table转为df对象private val frame: DataFrame = session.table("sz.emp1")//查询每个部门的平均工资,最高工资,最低工资,总人数//创建临时视图frame.createTempView("a")val sql="""|select deptno,max(sal),min(sal),avg(nvl(sal,0))|from|a|group by deptno|""".stripMargin//使用Spark执行SQL查询,以数df形式返回结果.session.sql(sql).show()
}
结果如下
+------+--------+--------+--------------------+
|deptno|max(sal)|min(sal)|avg(nvl(a.`sal`, 0))|
+------+--------+--------+--------------------+
| 20| 3000| 800| 2175.0|
| 10| 5000| 1300| 2916.6666666666665|
| 30| 2850| 950| 1566.6666666666667|
+------+--------+--------+--------------------+
也可以如下查询
agg方法:通过指定列名和聚合方法计算聚合。结果DataFrame
还将包含分组列。
可用的聚合方法有avg、max、min、sum、count
。
frame.groupBy("deptno").agg("sal"->"max","sal"->"min").show()
结果如下
+------+--------+--------+
|deptno|max(sal)|min(sal)|
+------+--------+--------+
| 20| 3000| 800|
| 10| 5000| 1300|
| 30| 2850| 950|
+------+--------+--------+
写入数据
saveAsTable方法
将DataFrame
的内容另存为指定的表。
在表已经存在的情况下,此函数的行为取决于由mode函数指定的保存模式(默认为引发异常)。当mode为Overwrite时,DataFrame的架构不需要与现有表的架构相同。
当mode为Append时,如果有一个现有表,我们将使用现有表的格式和选项。表中的数据顺序不必与该列的数据顺序相同。与InsertInto不同,saveAsTable将使用列名来查找正确的列位置。
object HiveDemo2 extends App {System.setProperty("HADOOP_USER_NAME", "root")private val session: SparkSession = SparkSession.builder().enableHiveSupport()//往动态分区表写数据需要这个.config("hive.exec.dynamic.partition.mode", "nonstrict").master("local").appName("hive").getOrCreate()//连接hive表返回df对象private val frame: DataFrame = session.table("sz.emp1")//存入数据,如果没有,会在hive中新建表格frame.write.saveAsTable("sz.temp1")session.stop()
}
例子
scala> Seq((1, 2)).toDF("i", "j").write.mode("overwrite").saveAsTable("t3")
//saveAsTable会基于列名来解析数据
scala> Seq((3, 4)).toDF("j", "i").write.mode("append").saveAsTable("t3")scala> sql("select * from t3").show
+---+---+
| i| j|
+---+---+
| 1| 2|
| 4| 3|
+---+---+
insertInto方法
将DataFrame的内容插入到指定的表中。它要求DataFrame的schema与表的schema相同。与saveAsTable不同,insertInto忽略列名,只使用基于位置的解析。
object HiveDemo3 extends App {System.setProperty("HADOOP_USER_NAME", "root")private val session: SparkSession = SparkSession.builder().enableHiveSupport().master("local").appName("hive").getOrCreate()//读取emp1表的数据转为DF对象private val frame: DataFrame = session.table("sz.emp1")//将上述DF对象的数据保存到temp1表中. 模式为追加模式.要求DataFrame的schema与表的schema相同.frame.write.mode(SaveMode.Append).insertInto("sz.temp1")session.stop()
}
再比如
//向表t2中写入数据,如不存在,则创建
scala>
Seq((1,2)).toDF("i","j").write.mode("overwrite").saveAsTable("t2")
//insertInto只基于位置的解析,与名字无关
scala> Seq((3,4)).toDF("j","i").write.insertInto("t2")
//insertInto只基于位置的解析,与名字无关
scala> Seq((5,6)).toDF("a","b").write.insertInto("t2")
//查看结果
scala> sql("select * from t2").show
+---+---+
| i| j|
+---+---+
| 1| 2|
| 3| 4|
| 5| 6|
+---+---+
错误解决
如果报权
限错误,在hive所在机器执行如下进行授权
hdfs dfs -chmod -R 777 /
总结
- 读取数据,可以创建临时视图.利用sql方法查询
- 写入数据,可以用saveAsTable方法或者insertInto方法. 其中saveAsTable会基于列名解析,而insertInto方法仅仅基于位置进行解析
spark与Hive的整合入门相关推荐
- Spark对接Hive:整合Hive操作及函数
1.拷贝hive-site.xml文件到spark的conf目录下 2.[hadoop@hadoop002 bin]$ ./spark-shell --master local[2] --jars ~ ...
- Spark SQL实战(08)-整合Hive
1 整合原理及使用 Apache Spark 是一个快速.可扩展的分布式计算引擎,而 Hive 则是一个数据仓库工具,它提供了数据存储和查询功能.在 Spark 中使用 Hive 可以提高数据处理和查 ...
- spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)...
1.在服务器(虚拟机)spark-shell连接hive 1.1 将hive-site.xml拷贝到spark/conf里 cp /opt/apache-hive-2.3.2-bin/conf/hiv ...
- spark之1:快速入门
spark之1:快速入门 @(SPARK)[spark, 大数据] spark可以通过交互式命令行及编程两种方式来进行调用: 前者支持scala与python 后者支持scala.python与jav ...
- Spark 连接hive local
采用读取recources文件夹下的配制文件方式hive-site.xml 一.通过hiveserver2 服务连接 $HIVE_HOME/bin/hiveserver2 object NewSpar ...
- 漫谈大数据 - Spark on Hive Hive on Spark
目录 Spark on hive 与 Hive on Spark 的区别 Hive查询流程及原理 Hive将SQL转成MapReduce执行速度慢 Hive On Spark优化 Hive元数据库的功 ...
- 【Spark+Hadoop+Hive+MySQL+Presto+SpringBoot+Echarts】基于大数据技术的用户日志数据分析及可视化平台搭建项目
目录 1.项目概述 1.1.项目背景 1.2.项目流程 2.功能需求描述 2.1.系统功能组成 2.2.数据描述 2.3.功能描述 2.3.1.流量概况分析 2.3.2.日新日活分析 2.3.3.交互 ...
- 2021年大数据Spark(三十一):Spark On Hive
目录 Spark On Hive spark-sql中集成Hive Spark代码中集成Hive Spark On Hive Spark SQL模块从发展来说,从Apache Hive框架而来,发展历 ...
- Spark采坑系列(三)Spark操作Hive的坑
2019独角兽企业重金招聘Python工程师标准>>> 跟着教学试着用Idea编程,实现Spark查询Hive中的表.结果上来就凉了. 捣鼓好久都不行,在网上查有说将hive-sit ...
最新文章
- 你的生产型ML复现不了,可能是工作流程出了问题
- Dask.distributed创建client时出现报错
- hyperworks2019安装教程
- Selenium - CSS Selector
- Spring注解编程基石(一)
- 怎么把线稿提取出来_如何快速提取漫画线稿?【漫画技巧】
- 一起学习linux之lamp脚本
- delphi 同盘移动文件所用时间测试(文件大小约6,083,545,088 字节)
- php后台修改_ThinkPHP实现在可视化后台管理永久修改_php
- 秒杀面试 - 程序员面试宝典
- Cortex-M0芯片GPIO详解
- 概率统计Python计算:单个正态总体均值的双侧区间估计
- 专访爱情公寓CEO张家铭:中国SNS网站格局已定
- linux在双系统中消失了,win和linux双系统下,重装win系统导致linux系统消失的解决办法...
- 编程题--疯狂序列----京东大数据笔试
- python概率编程_Python概率编程库PyMC应用案例二则,pymc应用案例
- Android的IPC
- 数据库中decimal
- linux基础培训ppt,Linux 基础培训.ppt
- iOS 【如何写出最简洁优雅的网络封装 Moya + RxSwift】
热门文章
- 盐城计算机考试时间安排,2019盐城中考具体时间安排 什么时候考试
- swagger 返回json字符串_[Swagger] Swagger Codegen 高效开发客户端对接服务端代码
- 通过内网穿透 将本地端口 使其外网可以进行访问 使用花生壳内网穿透 网站访问
- Android Studio生成函数注释
- ps人像精修照片步骤_15天零基础自学PS!送你整套PS教程297集+视频+素材+源文件模板6...
- 交换机启用光口命令_华为光交换机查看光模块命令
- telnet发送socket报文_简单讲解一下Socket网络编程
- python输入一个字符串、计算其中小写字符的个数_编写程序,输入一个字符串,统计其中大小写字母数字和其他符号的个数并输出,要求统计过程在函数COUNT中进行...
- vue一个页面用两个以上页面 时时刷新
- oracle怎样查询能利用索引,oracle怎样查询索引的使用情况