Hive 和 Spark 之间的十进制解释差异

问题描述 投票:0回答:1

我正在使用 Hive 和 Spark 查询同一个 Hive 表。

这是查询:

SELECT balance, interest FROM interests WHERE acct_n = 123

蜂巢:

平衡 兴趣
1000000 233.47

火花:

平衡 兴趣
1000000 0.0000023347

余额和利息列在表定义中均定义为

DECIMAL(38, 10)
。检查源系统后发现Hive结果正确,而Spark结果不正确。

这种差异令人费解。任何人都可以阐明为什么会发生这种情况并提出纠正方法吗?

sql apache-spark hadoop hive etl
1个回答
0
投票

我找到原因了,想分享一下。

底层 Parquet 文件以不同的精度 DECIMAL(37, 2) 保存,与 Hive 表架构 DECIMAL(38, 10) 不同。

解决方案:

CAST(interest AS DECIMAL(38, 10)
在写入表之前。

© www.soinside.com 2019 - 2024. All rights reserved.