我正在使用 Hive 和 Spark 查询同一个 Hive 表。
这是查询:
SELECT balance, interest FROM interests WHERE acct_n = 123
蜂巢:
平衡 | 兴趣 |
---|---|
1000000 | 233.47 |
火花:
平衡 | 兴趣 |
---|---|
1000000 | 0.0000023347 |
余额和利息列在表定义中均定义为
DECIMAL(38, 10)
。检查源系统后发现Hive结果正确,而Spark结果不正确。
这种差异令人费解。任何人都可以阐明为什么会发生这种情况并提出纠正方法吗?
我找到原因了,想分享一下。
底层 Parquet 文件以不同的精度 DECIMAL(37, 2) 保存,与 Hive 表架构 DECIMAL(38, 10) 不同。
解决方案:
CAST(interest AS DECIMAL(38, 10)
在写入表之前。