赞
踩
一、相同函数差异
二、仅Hive支持
三、仅Spark支持
四、Parquet表格式相关
五、备注
1.Spark运行时用到的hash函数,与Hive的哈希算法不同,如果使用hash(),结果和Hive的hash()会有差异
解决方案:SparkSQL中将hash()修改为兼容Hive的函数hive_hash()
2.Hive和SparkSQL使用grouping sets生成的GROUPING_ID不一致
示例:
Hive:
Spark:
3.regexp_extract未匹配上的话,在HIVE里回是null,但在Spark里返回是空字符
示例:regexp_extract('00000000', '^(0{1,})?([0-9a-zA-Z]+)?', 2),HIVE返回null,Spark返回空字符
4.SparkSQL中row_number的over中不能省略sort by 或order by
示例:
row_number()over(partition by 字段1,字段2 order by 字段3) as row_num
或
row_number()over(distribute by 字段1,字段2 sort by 字段3) as row_num
其中order by或sort by不能省略
5.grouping_id()函数生成的数据不同
6.reflect()函数中,如果入参有非法数据或者null,hive会返回null,而spark会抛出异常
解决方案:SparkSQL中将reflect()修改为兼容Hive的函数hive_reflect()
1.SparkSQL关联on条件不支持函数rand()
示例:on (concat(rand(), t1.xxx)) = t2.xxx 这样会遇到以下报错:
解决方案:在on语句之前利用子查询将rand()处理好,如“concat(rand(), t1.xxx) as bitrary”,然后放到on语句后进行关联,如“on t1.bitrary = t2.xxx”
2.创建临时表时,Spark不支持直接赋值null
示例:create table brock_tmp.tmp_18061294
stored as orc as
select pv_id,
null as apply_tp_cd
from table
解决方案:在SparkSQL中将null强转成期望类型,比如字段类型如果是string,则使用"cast (null as string)"强制转换类型
3.SparkSQL无法读取字段类型为void的表
现象:
解决方案:此情况一般为Hive建临时表时查询存在"null as xx"的情况,Hive会将该字段类型识别为void,而SparkSQL不支持void类型,按照第2条将表重建即可解决
4.SparkSQL中如果表达式没有指定别名,SparkSQL会将整个表达式作为别名。如果表达式中包含特殊符号(如逗号),则CTAS建表会失败
示例:create table test_bigdata_20190119 using parquet as select nvl(dummy, '1') from dual;
上述查询中,SparkSQL会把nvl(dummy, '1')直接作为别名建表,导致建表失败
解决方案:在复杂表达式后指定别名:create table test_bigdata_20190119 using parquet as select nvl(dummy, '1') as dummy from dual;
1.SparkSQL允许在join on条件中使用or等不等值关联语句,Hive中不允许,只能用等值关联。
示例:select t1.xx, t2.xxx from students t1
left join class t2
on t1.classId >= t2.id
or t1.classname = t2.name
order by t1.id;
1.SparkSQL中如果建立Parquet Datasource表(create table using parquet as,使用动态分区对不同分区同时写入数据时会报错,除Parquet Datasource以外格式无该问题
解决方案:如果有动态分区同时多分区写入的业务需求,可使用“create table stored as orc as”或“create table using orc as”等方式建表。
2.创建Parquet格式表时,如果字段类型为数组,该字段不能有空值,否则读写时会报错。
解决方案:如果业务需求中遇到数组类型字段且其中需要有空值的,可使用“create table stored as orc as”或“create table using orc as”等方式建表。
1.SparkSQL语法以Spark-2.3.X为准
关注微信公众号【飞哥大数据】,回复666 获取2022年100+公司面试真题,以及spark与flink面试题汇总
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。