如何解决从 Apache Spark 加载时以科学格式存储在 Hive 表中的小数
我在使用 hive 表时遇到问题,其中十进制数(例如 0.00000000000)存储为 0E-11。即使它们代表相同的值 0,我也不明白为什么它以科学格式存储。这是用于数值计算的百分比字段之一,因此十进制数的比例应该很高。即使它是科学格式,它也不会以任何方式影响我们的计算。我们能够进行数字运算,但科学格式的表示可能会给使用此表的人带来一些困惑。此问题仅在百分比为 0 时发生。在其他存在有效百分比(如 0.123456789)的情况下,该值将按原样存储,没有任何 epsilon。
你能解释一下为什么 0.00000000000 用科学格式表示吗?另外,我想知道如何在没有像 0.00000000000 这样的 epsilon 的情况下按原样存储十进制数。出于我们的目的,我们希望解决方案仅使用 Hive 查询语言 (HQL),因为我们有一个框架,可以接收 hql 文件并将 hql 文件的结果写入 hive 表。
为了演示这个问题,我按照以下步骤操作。
- 我创建了一个带有小数和字符串列的临时表。
- 它使用镶木地板作为文件格式。
- 插入 0.00000000000 作为字符串和十进制 (12,11)。
- 同时显示列,并且都以科学格式显示。
- 尝试使用 parquet-tools 检查文件内容,但即使在 parquet 文件中,它也存储在 科学格式。
- 也尝试使用纯文本格式,但行为相同。
我使用 Spark 2.3 运行。我查看了各种 StackOverflow 线程,例如 this、this 和 this,但它们使用 Spark Dataframe API 来保留自然数格式,但我希望解决方案是基于 HQL .
如果有任何问题,请告诉我。
解决方法
我认为 format_number 函数应该可以为您解决问题。
请看下面的帖子
How to show decimal point in hive?
感谢用户 https://stackoverflow.com/users/4681341/vk-217?tab=profile
我检查了它,它正在工作。
select format_number(0.00000000000,11);
注意:没有足够的声誉来发表评论,因此在此处将其添加为答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。