【问题标题】:Pyspark cast integer on a double number returning 0sPyspark 在返回 0 的双精度数上转换整数
【发布时间】: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|

非常感谢任何建议。

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案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|
    #+--------------------+-----------------------+
    

    【讨论】:

    • 感谢分享这个答案。就我而言,它非常不成熟。我应该注意到那个负指数。无论如何,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2016-01-01
    • 2013-05-13
    • 1970-01-01
    相关资源
    最近更新 更多