Spark Sql 读写 Hive 数据不一致

2020年11月12日 31点热度 0人点赞 0条评论

在大数据公司中,任何一家公司都不会只使用一个框架吧?!

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

create table if not exists testTab( id string, name string ) 
row format delimited fields terminated by ","
tblproperties("skip.header.line.count"="1");

id,name 
1,xzheng 
2,bbeir 
3,hive 
4,saprk

 

加载数据到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 |
+---+------+

药不能停、药不能停

解决方法-1:

在原始表的基础上,再建立一个备份表,通过Spark Sql查询结果正确

create table if not exists testTab_2row format delimited fields terminated by "," as  select * from testTab;

 

解决方法-2:

通过spark的read函数,直接操作存在hdfs上的原始数据,然后再建表

scala> val df = spark.read.format("csv").option("path","hdfs://path_to_hdfs/testData.txt").option("header",true).option("delimiter",",").load
scala> df.show()
+---+------+
|id |name  |
+---+------+
|1  |xzheng|
| 2  |bbeir |
|3  |hive  |
| 4  |spark |
+---+------+

我的青春真实存在过

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

有不同看法,下方留言讨论,别让你的小秘密淹没在未知里

我也该咽下这根美好的鱼骨头了

阿布

源自灵魂深处的自我救赎。

文章评论