【问题标题】:Spark SQL result different from Hive SQL resultSpark SQL 结果与 Hive SQL 结果不同
【发布时间】:2021-12-19 04:30:54
【问题描述】:
我在 hive shell 和 spark shell 中都执行了 SQL 语句 select cityroaddis from trip_db.tripTable where tripid='a0001' and day>'2020-09-09',但得到的结果完全不同。
两个结果
| Hive: cityroaddis |
Spark: cityroaddis |
| 0.0 |
null |
注意:
- 我在创建hive表时将
cityroaddis的数据类型指定为Double
- Hive 中的 cityroaddis 列没有空值
- 只有 0.3% 的行有这样的问题
- 并非所有列在 hive 和 spark 之间都存在不一致(70 列中可能有 15 列)
以前有人遇到过这样的问题吗?
【问题讨论】:
标签:
apache-spark
hive
apache-spark-sql
【解决方案1】:
我添加了这两个配置后问题就解决了。
spark.sql.hive.convertMetastoreOrc=false
spark.sql.hive.convertMetastoreParquet=false
spark.sql.hive.convertMetastoreParquet :读写时
对于 Hive Metastore Parquet 表,Spark SQL 将尝试使用自己的
Parquet 支持而不是 Hive SerDe 以获得更好的性能。这
行为由 spark.sql.hive.convertMetastoreParquet 控制
配置,默认开启。
spark.sql.hive.convertMetastoreOrc:启用新的 ORC 格式以
读/写 Hive 表。