spark与hive查询结果不一致
spark.sql.hive.convertMetastoreParquet=false;
spark.sql.hive.convertMetastoreOrc=false;
为了优化读取parquet格式文件,spark默认选择使用自己的解析方式读取数据,结果读出的数据就有问题。
hive写的parquet的表用hive的;spark写的parquet表用spark的
2. 精读问题
3. 可以看下SQL 中 join on 两边的字段类型是否一致;如果不一致,很可能会出现问题
当 on 条件两边字段类型都一致的情况下,毫无疑问,在hive和spark中都是正确的
当 on 条件两边字段类型不一致的情况下,需要看类型转换方向决定,判断结果是否正确
1)当 on 条件两边字段类型,一边是decimal,一边是bigint
无论是
bigint=decimal
decimal=bigin
都转成 decimal 正确
2)当 on 条件两边字段类型,一边是string,一边是bigint
spark-sql: 把 string 转成 bigint,结果正确
spark-shell: 把 string 转成 bigint,结果正确
hive: 把 string,bigint 都转成 double,结果错误
3)当 on 条件两边字段类型,一边是string,一边是decimal
spark-shell: string,decimal 都转成了 double,结果错误
spark-sql: string,decimal 都转成了 double,结果错误
hive: string,decimal 都转成了 decimal(38,18), 结果正确