spark 1.3.0 将dataframe数据写入Hive分区表

从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API。

DataFrame将数据写入hive中时,默认的是hive默认数据库,insertInto没有指定数据库的参数,本文使用了下面方式将数据写入hive表或者hive表的分区中,仅供参考。


1、将DataFrame数据写入到Hive表中

从DataFrame类中可以看到与hive表有关的写入Api有以下几个:

registerTempTable(tableName: String)Unit,

insertInto(tableName: String)Unit

insertInto(tableName: Stringoverwrite: Boolean)Unit

saveAsTable(tableName: Stringsource: Stringmode: SaveModeoptions: Map[StringString])Unit

有很多重载函数,不一一列举

registerTempTable函数是创建spark临时表

insertInto函数是向表中写入数据,可以看出此函数不能指定数据库和分区等信息,不可以直接进行写入。

向hive数据仓库写入数据必须指定数据库,hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....")

下面语句是向指定数据库数据表中写入数据:

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")


创建一个case类将RDD中数据类型转为case类类型,然后通过toDF转换为DataFrame,调用insertInto函数时,首先指定数据库,使用的是hiveContext.sql("use DataBaseName")语句,就可以将DataFrame数据写入hive数据表中了


2、将DataFrame数据写入hive指定数据表的分区中

hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ...."),使用saveAsTable时数据存储格式有限,默认格式为parquet,可以指定为json,如果有其他格式指定,尽量使用语句来建立hive表。

将数据写入分区表的思路是:首先将DataFrame数据写入临时表,之后是由hiveContext.sql语句将数据写入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数据写入hive分区表了




本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

OpenCVR 微信帐号 - 2015-04-24 20:04:11

本文介绍在基于VMware技术的虚拟机资源池上,部署Pivotal Cloud Foundry(PCF)的过程。Pivotal对Cloud Foundry(CF)进行了商业化包装,虽然其部署过程现阶段还没有简单到vSphere产品线的水平,但是比开源版本的部署要容易的多。本文将包括Pivotal Ops Manager、Operations Manager Director for VMware vSphere和Pivotal Elastic Runtime构成的CF基础环境、Java/Ruby等buil
Azure现在主要提供A系列、D系列、G系列虚拟机。 D系列的虚拟机,相比A系列同编号的虚拟机,内容要大1倍。 新的虚拟机的CPU性能提升60%、更大的内容及本地使用了SSD固态硬盘。
软件版本: Hadoop:2.6.0; Mahout:1.0(自行编译,只使用了两个jar文件);Spring:4.0.2;Struts:2.3;Hibernate:4.3;jQuery EasyUI :1.3.6;MySql:5.6;浏览器:chrome;MyEclipse:10.0; Hadoop平台配置: node1:  NameNode/ResourceManger/DataNode/NodeManager    Memory:2G node2: NodeManager/DataNode/Seco
之前因为做过随机森林方面的项目,对随机森林有过研究,但理论这块还不是很深入,代码倒是看了不少,这里写下这篇博客,说说对随机森林的一些理解,以及附上了一份代码注释。 1. 随机森林 随机森林属于非传统式的机器学习算法,由多颗决策树组成,每棵决策树处理的是一个训练样本子集。训练阶段,通过决策树的节点分裂来筛选特征,层层对样本进行细分,直至将每个训练样本子集分类正确,测试阶段,直接基于训练出的特征进行样本分类,所以测试速度较快(但训练速度较慢)。属于“傻瓜式”的策略(这点和adaboost很像很像),以下部分是

Erlang 印象 - 2015-04-24 10:04:30

和朋友切磋高并发的时候,有一次涉及了Erlang,Erlang出自名门爱立信,具有稳定性极高的虚拟机和平台库,Facebook用它实现了聊天系统,Amazon 开发了SimpleDB,最令人惊叹的是What'sApp了,高并发的处理机制令人瞩目,是时候了解一下Erlang了。 世界是并行的,Erlang程序反应了我们思考和交流的方式,人作为个体通过发送消息进行交流,如果有人死亡,其他人会注意到。 Erlang里的模块类相当于OOPL中的类,进程相当于OOPL里的对象或类实例。 并发编程可以用来提升性能,创

hive压缩之小文件合并 - 2015-04-24 10:04:30

Hive压缩之二 小文件合并   调研背景 当Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至OOM。为此,当我们启动一个任务,发现输入数据量小但任务数量多时,需要注意在Map前端进行输入合并。当然,在我们向一个表写数据时,也需要注意输出文件大小。 输入合并 合并输入小文件,减少map数? 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小。 举例: a)   
首先是libvirt定义网络过滤规则的相关命令: virsh nwfilter-define  后面加上一个xml文件,从一个XML文件中定义或者更新一个网络过滤规则。 virsh nwfilter-dumpxml  后面加上某个网络过滤规则的名称,查看一个网络规则的XML详细信息。 virsh nwfilter-edit  后面加上某个网络过滤规则的名称,编辑一个网络规则。 virsh nwfilter-list 列出所有定义成功的网络过滤规则。 virsh nwfilter-undefine 后面加上

opencontrail学习(一) - 2015-04-24 09:04:04

从某位大牛的微博上看到了对opencontrail的评价,引起了我的兴趣,点开有人为其翻译的中文文档学习了下,把之前一些零碎的东西,比较系统性地串起来了,感觉很爽,所以决定把src下下来八一八。 下载了contrail-vrouter的代码,因为刚好在做底层类似的东西,可以对比学习下,contrail-controller的代码,暂时没时间研究了,留着闲了再说。 1. 先从数据结构上分析, 它里面都是基于vr_packet来做,对于linux而言就是在skb-cb里面存了一个结构,并把skb-head等信

hadoop文件系统详解--(1) - 2015-04-24 06:04:12

Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现。Java抽象类 org.apache.hadoop.fs.FileSystem展示了Hadoop的一个文件系统,而且有几个具体实现,如表 3-1所示。 文件系统 URI 方案 Java实 现(全部在 org.apache.hadoop) 描述 Local file fs.LocalFileSystem 针对有客户端校验和 的本地连接磁盘使用 的文件系统。针对没 有校验和的本 地文件系统使用 RawLocalFileSystem。 详情参见第