0

我面临一个配置单元表的问题,其中十进制数(例如 0.00000000000)存储为 0E-11。即使它们代表相同的值 0,我也不明白为什么它以科学格式存储。这是用于数值计算的百分比字段之一,因此十进制数的比例应该很高。即使它是科学格式,它也不会以任何方式影响我们的计算。我们可以进行数字运算,但科学格式的表示可能会给使用此表的人带来一些困惑。仅当百分比为 0 时才会出现此问题。在其他存在有效百分比(如 0.123456789)的情况下,该值将按原样存储而没有任何 epsilon。

您能解释一下为什么 0.00000000000 以科学格式表示吗?另外,我想知道如何在没有像 0.00000000000 这样的 epsilon 的情况下按原样存储十进制数。出于我们的目的,我们希望解决方案仅使用 Hive 查询语言 (HQL),因为我们有一个框架,该框架采用 hql 文件并将 hql 文件的结果写入 hive 表。

为了演示这个问题,我按照以下步骤操作。

  1. 我创建了一个带有小数和字符串列的临时表。
  2. 它使用镶木地板作为文件格式。
  3. 插入 0.00000000000 作为字符串和十进制(12,11)。
  4. 显示两个列,并且都以科学格式显示。
  5. 尝试使用 parquet-tools 检查文件内容,但即使在 parquet 文件中,它也以科学格式存储。
  6. 也尝试使用纯文本格式,但行为是相同的。

Spark-shell 截图

镶木地板工具屏幕截图

我正在使用 Spark 2.3 运行。我查看了各种 StackOverflow 线程,例如thisthisthis ,但它们使用 Spark Dataframe API 来保留自然数格式,但我希望解决方案是 HQL。

如果有任何问题,请告诉我。

4

1 回答 1

1

我认为 format_number 函数应该为您解决问题。

请看下面的帖子

如何在蜂巢中显示小数点?

感谢用户h​​ttps://stackoverflow.com/users/4681341/vk-217?tab=profile

我检查了它,它正在工作。

select format_number(0.00000000000,11);

注意:没有足够的声誉来发表评论,所以在这里添加它作为答案。

于 2021-05-26T04:45:08.320 回答