Pyspark 在返回 0 的双精度数上转换整数

Posted

技术标签:

【中文标题】Pyspark 在返回 0 的双精度数上转换整数【英文标题】:Pyspark cast integer on a double number returning 0s 【发布时间】:2020-05-11 18:45:30 【问题描述】:

在我的 PYspark 数据框中,我有一个类型为 double 的列。以下是它持有的数据:

|            HV ratio|
+--------------------+
|4.819714653321546E-6|
|6.290848613094555E-6|
|4.669412994783916E-6

我正在尝试将数字四舍五入到小数点后 2 位。以下是我正在运行的查询:

hv_ratio.select(format_number(hv_ratio["HV ratio"].cast('integer'),2).alias('HV ratio')).show()

但它返回的是零(如下所示):

|HV ratio|
+--------+
|    0.00|
|    0.00|
|    0.00|

非常感谢任何建议。

【问题讨论】:

【参考方案1】:

4.819714653321546E-6 的真实号码是 0.000004819714653321546

当你转换为 int 值变为 0 然后format_number 舍入 2 我们将得到 0.00 而不是舍入到 >5 小数位,然后您将看到实际值。

Example:

df.withColumn("new_hvratio", format_number(col("HVratio"),21)).show(10,False)
#+--------------------+-----------------------+
#|HVratio             |new_hvratio            |
#+--------------------+-----------------------+
#|4.819714653321546E-6|0.000004819714653321546|
#+--------------------+-----------------------+

【讨论】:

感谢分享这个答案。就我而言,它非常不成熟。我应该注意到那个负指数。无论如何,再次感谢。

以上是关于Pyspark 在返回 0 的双精度数上转换整数的主要内容,如果未能解决你的问题,请参考以下文章

舍入双精度值并转换为整数

格式,Java 中的双精度和整数的 2 位小数和 0

Java - Decimal Format.parse 返回具有指定小数位数的双精度值

将非常小的双精度值转换为字符串(使用科学计数法)(Java)

返回没有尾随零的双精度类型

C# 将 20 位精度双精度转换为字符串并再次返回