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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM