2017-07-03 32 views
0

我正在研究一個將數據框插入Hive Table的Spark程序,如下所示。Spark Version 2中的HiveContext

import org.apache.spark.sql.SaveMode 
import org.apache.spark.sql._ 
val hiveCont = val hiveCont = new org.apache.spark.sql.hive.HiveContext(sc) 
val partfile = sc.textFile("partfile") 
val partdata = partfile.map(p => p.split(",")) 
case class partc(id:Int, name:String, salary:Int, dept:String, location:String) 
val partRDD = partdata.map(p => partc(p(0).toInt, p(1), p(2).toInt, p(3), p(4))) 
val partDF = partRDD.toDF() 
partDF.registerTempTable("party") 
hiveCont.sql("insert into parttab select id, name, salary, dept from party") 

我知道Spark V2已經出來了,我們可以在其中使用SparkSession對象。 我們是否可以使用SparkSession對象直接將數據框插入到Hive表中,還是必須使用版本2中的HiveContext?任何人都可以讓我知道HiveContext版本的主要區別是什麼?

回答

1

您可以使用SparkSession(通常稱爲sparkss)直接觸發一個SQL查詢(確保蜂巢支持創建火花會話時啓用):

spark.sql("insert into parttab select id, name, salary, dept from party") 

不過,我會建議這記數法,你不需要創建一個臨時表等:

partDF 
.select("id","name","salary","dept") 
.write.mode("overwrite") 
.insertInto("parttab") 
+0

哦! 因此,從Spark版本2x中,我可以直接使用sparkSession對象將數據框插入到現有的Hive表中。我的理解是否正確? – Sidhartha

+0

@Sidhartha是的,'SparkSession'是一切的主要入口點,'HiveContext'和'SqlContext'不再需要 –