我面临一个配置单元表的问题,其中十进制数(例如 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。
如果有任何问题,请告诉我。