zoukankan      html  css  js  c++  java
  • Hive:Spark中如何实现将rdd结果插入到hive1.3.0表中

    • 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

  • 相关阅读:
    将一个正整数分解质因数
    C语言中字符数组和字符串、字符串常量(转载)
    输出那一天是星期几
    吸血鬼数字—THINKING IN JAVA中一道习题
    Oracle外连接,左外连接,右外连接,内连接简析
    函数基础篇 Zeus
    程序员从初级到中级10个秘诀
    帮你免于失业的十大软件技术
    入门级XML学习(二)
    入门级XML学习(一)
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/6082048.html
Copyright © 2011-2022 走看看