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 - Decimal Format.parse 返回具有指定小数位数的双精度值