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 ...
最新文章
- 985博士《深度学习》手推公式笔记开源PDF下载!
- 使用snoopy logger记录用户命令
- pu learning的建模实践,半监督学习的好方法!
- 今日arXiv精选 | 15篇EMNLP 2021最新论文
- ITK:使用平面结构元素腐蚀二进制图像
- 【转】一篇比较清晰简单的C++文件操作
- 解决org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql ...
- python成绩转换、百分制到五分制_设计一个程序,将从键盘上输入的百分制成绩转换成对应的五分制成绩并输出。90分以上为A,80~90分为B,...
- ASP.NET AJAX1.0尝鲜试用:Web Service调用
- java datatable用法_Java中实现DataTable工具类,并利用其实现简单分页控件。
- setContentView是如何把布局加上去的
- 晶体管开关电路的设计以及如何提高其开关速度
- 全网最全的AItium Designer 16下载资源与安装步骤
- 关于网络异常的英文词汇总结
- 计算机二级办公室应用题目,干货|计算机二级备考攻略
- 好片推荐---《WALL·E》(又名《机器人瓦力》
- c++之 std::tie
- 编程世界,我的世界。
- ChinaSoft 论坛巡礼 | 编译器与编程语言
- java saf_在不支持的浏览器中替代IndexedDB? Safari / iOS Saf-Chrome
热门文章
- 网卡重启影响nfs吗_NFS性能优化 不完整介绍
- python界面制作和unity的有区别吗_由1~4人利用Sratch、Python、Unity或其它游戏开发工具设计与制作一个的教育类游戏。...
- 新手如何使用Docker来搭建PHP开发环境?
- cesium 加载科技感
- python3.5中文手册chm_python3.5.2官方帮助文档 参考手册(CHM版)
- 解决:git push error: failed to push some refs to
- 华为鸿蒙mate,华为MatePad Pro发布亮相!华为首款鸿蒙平板全新体验!
- python中trun是什么意思_Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解...
- IDEA 修改 jdk 版本
- java学习之Eclipse开发工具