2017-07-03 33 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'不再需要 –