Hive:Spark中如何实现将rdd结果插入到hive1.3.1表中

Posted yy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive:Spark中如何实现将rdd结果插入到hive1.3.1表中相关的知识,希望对你有一定的参考价值。

  • DataFrame写入hive API:
  1. registerTempTable函数是创建spark临时表
  2. insertInto函数是向表中写入数据,可以看出此函数不能指定数据库和分区等信息,不可以直接进行写入。
  3. 向hive数据仓库写入数据必须指定数据库,hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....")
case class Person(name:String,col1:Int,col2:String)

def main(args:Array[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")
}

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

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

将数据写入分区表的思路是:首先将DataFrame数据写入临时表,之后是由hiveContext.sql语句将数据写入hive分区表中。具体操作如下:

case class Person(name:String,col1:Int,col2:String)
def main(args:Array[String]):Unit={
    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")
}

 

声明本文转自:http://www.aboutyun.com/thread-12392-1-1.html

 

以上是关于Hive:Spark中如何实现将rdd结果插入到hive1.3.1表中的主要内容,如果未能解决你的问题,请参考以下文章

spark利用sparkSQL将数据写入hive两种通用方式实现及比较

Spark 分区:创建 RDD 分区但不创建 Hive 分区

将 RDD 加载到 hive

Spark RDD 抛出 NullPointerException

Spark 开发调优

如何在 Spark 1.3 中通过 Hive 指示 SparkSQL 中的数据库