簡體   English   中英

使用Spark Scala將數據插入HiveContext的Hive表中

[英]Insert data into a Hive table with HiveContext using Spark Scala

我能夠使用HiveContext從我的spark代碼中將數據插入到Hive表中,如下所示

   val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
   sqlContext.sql("CREATE TABLE IF NOT EXISTS e360_models.employee(id INT, name STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'")

   sqlContext.sql("insert into table e360_models.employee select t.* from (select 1210, 'rahul', 55) t")
   sqlContext.sql("insert into table e360_models.employee select t.* from (select 1211, 'sriram pv', 35) t")
   sqlContext.sql("insert into table e360_models.employee select t.* from (select 1212, 'gowri', 59) t")

   val result = sqlContext.sql("FROM e360_models.employee SELECT id, name, age")
   result.show()

但是,這種方法是在倉庫中為每個插入創建一個單獨的文件,如下所示

part-00000
part-00000_copy_1
part-00000_copy_2
part-00000_copy_3

有沒有辦法避免這種情況,只是將新數據附加到單個文件中,還是有其他更好的方法將數據從spark插入hive?

不,沒有辦法做到這一點。 每個新插入都將創建一個新文件。 這不是Spark的“問題”,而是你可以通過Hive體驗到的一般行為。 唯一的方法是使用所有數據的UNION執行單個插入,但如果需要進行多次插入,則會有多個文件。

你唯一能做的就是在hive中啟用文件合並(在這里查看: Hive為HDFS中的每個插入創建多個小文件https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties ) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM