Spark如何读写hive
2024-10-07 22:34:25
原文引自:http://blog.csdn.net/zongzhiyuan/article/details/78076842
hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....")
1) 写入hive表
- case class Person(name:String,col1:Int,col2:String)
- val sc = new org.apache.spark.SparkContext
- val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
- import hiveContext.implicits._
- hiveContext.sql("use DataBaseName")
- val data = sc.textFile("path").map(x=>x.split("\\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))
- data.toDF().insertInto("tableName")
2)写入hive分区中
- case class Person(name:String,col1:Int,col2:String)
- val sc = new org.apache.spark.SparkContext
- val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
- import hiveContext.implicits._
- hiveContext.sql("use DataBaseName")
- val data = sc.textFile("path").map(x=>x.split("\\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))
- data.toDF().registerTempTable("table1")
- hiveContext.sql("insert into table2 partition(date='2015-04-02') select name,col1,col2 from table1")
将数据写入分区表的思路是:首先将DataFrame数据写入临时表,之后是由hiveContext.sql语句将数据写入hive分区表中。
3)优化
将文件存为符合hive table文件的格式,然后使用hive load将产生的结果文件直接move到指定目录下。代码如下:
- result.rdd.map { r => r.mkString("\001") }.repartition(partitions).saveAsTextFile(output_tmp_dir)
- sql(s"""load data inpath '$output_tmp_dir' overwrite into table $output partition (dt='$dt')""")
hive column默认分隔符在scala/java中的表示为“/001”,r.mkString("/001")既是将column以分隔符/001进行分割,hive在导入时会自动识别。
使用hive load data命令,将hdfs文件load到hive表中。后台操作为直接将目录下的文件移到hive table所在目录,所以只是hdfs move数据的过程,执行非常快。
需要注意的是,此处要求hive建表时,以textfile格式建表。
参考:
http://blog.csdn.net/zgc625238677/article/details/53928320
如果是命令行操作,可以参考http://blog.csdn.net/fansy1990/article/details/53401102
《如何解决spark写hive慢的问题》http://blog.csdn.net/lulynn/article/details/51543567
最新文章
- linux云服务器mysql ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’
- Fedora 24最新工作站版本之四大重要改进
- Java8简明教程(转载)
- vmware 虚拟机 桥接 设置静态 IP
- Android控件(一)下拉刷新:SwipeRefreshLayout
- SQLServer2012 分页语句执行分析
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法 转载
- 移动UI
- properties文件作用以及在哪些地方用
- Jquery基础知识01
- 洛谷 [P1387] 最大正方形
- 打印十字图 JAVA 递归实现
- JavaFX——简单的日记系统
- 【noip模拟赛4】Matrix67的派对 暴力dfs
- docker往阿里云推镜像和打包镜像
- #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)
- VC,VB操作XML
- JS 互相调用iframe页面中js方法、VUE里 iframe 互调方法
- Flex用HTTPService调用servlet返回中文乱码解决
- 0053 用注解方式配置Spring MVC