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 的双精度数上转换整数的主要内容,如果未能解决你的问题,请参考以下文章