hive中匯入csv_[大資料]Hive:Spark,我發現你有小祕密啊~
技術標籤:hive中匯入csv
01
請問,你的夢想是什麼?
在大資料公司中,任何一家公司都不會只使用一個框架吧?!
skr,skr~~
那我們今天就來聊一段 Hive 與 Spark的愛恨情仇
就像
在一些場景中,需要將外部的資料匯入到Hive表中,然後再對這些資料進行額外的處理,提供給不同的部門使用。
當導完資料之後,需要用到Spark進行後續的處理時,發現數據多了一條
Spark:Omg,我頂你個肺~
這種情況的排查,我們需要從資料來源頭一步步檢驗,找出來這突然多出來的資料究竟是何方妖怪,想想是一件很恐怖的事情
Hive:同志,冷靜
資料重複?索引重複?
俗話說不會面向度娘程式設計的Hive不是好Spark,在拔掉了兩根頭髮之後發現問題:表頭!
02
我不能干涉被測試框架的客觀性
環境模擬
Centos 7 Spark 2.4.4 scala 2.11.8 JDK 1.8 Hive 1.2.2 hadoop 2.7.3
建立測試表:testTab
createtableifnotexiststestTab(idstring,namestring) rowformatdelimitedfieldsterminatedby","tblproperties("skip.header.line.count"="1");
測試資料:testData.txt
id,name 1,xzheng 2,bbeir 3,hive 4,spark
載入資料到Hive表中:
load data local inpath "/usr/local/src/testData.txt" overwrite into table testTab;
在Hive中查詢:
select * from testTab;+----------------------+------------------------+--+| testTab.id | testTab.name |+----------------------+------------------------+--+| 1 | xzheng ||2|bbeir|| 3 | hive ||4|spark|+----------------------+------------------------+--+
Spark SQL查詢:
+---+------+|id |name |+---+------+|id |name || 1 |xzheng||2 |bbeir || 3 |hive ||4 |spark |+---+------+
03
藥不能停、藥不能停
解決方法-1:
在原始表的基礎上,再建立一個備份表,通過Spark Sql查詢結果正確
create table if not exists testTab_2rowformatdelimitedfieldsterminatedby","asselect*fromtestTab;
解決方法-2:
通過spark的read函式,直接操作存在hdfs上的原始資料,然後再建表
scala> val df = spark.read.format("csv").option("path","hdfs://path_to_hdfs/testData.txt").option("header",true).option("delimiter",",").loadscala> df.show()+---+------+|id |name |+---+------+|1 |xzheng|| 2 |bbeir ||3 |hive|| 4 |spark |+---+------+
04
我的青春真實存在過
Hive在建立表的時候可以通過增加:tblproperties("skip.header.line.count"="1") 語句來忽略第一行。skip.heaer.line.count :跳過檔案行首多少行
skip.footer.line.count :跳過檔案行尾多少行
Hive中設定的忽略表頭在Spark中不生效!
Hive中設定的忽略表頭在Spark中不生效!
Hive中設定的忽略表頭在Spark中不生效!
05
你人性深處隱藏了很多小祕密
小祕密:
https://issues.apache.org/jira/browse/HIVE-5795
https://issues.apache.org/jira/browse/SPARK-11374
有不同看法,下方留言討論,別讓你的小祕密淹沒在未知裡
我也該嚥下這根美好的魚骨頭了
個人站點:www.TopAbu.com
那我現在跟你講國語了:
點點“在看”,你最好看!
點點”分享“,朋友也爽!