spark中的pyspark列乘法

ttisahbt  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(1841)

我想把Spark中的两列相乘。两列都是double类型。26.0和0.001之间的乘法结果是0.02600000000000002,而不是0.0026。如何解决此问题?

>>> df.printSchema()
root
 |-- age: double (nullable = true)
 |-- name: string (nullable = true)
 |-- mul: double (nullable = false)

>>> df.withColumn('res', df['age']*df['mul']).show()
+----+--------+-----+--------------------+
| age|    name|  mul|                 res|
+----+--------+-----+--------------------+
|25.0|   Ankit|0.001|               0.025|
|22.0|Jalfaizy|0.001|               0.022|
|20.0| saurabh|0.001|                0.02|
|26.0|    Bala|0.001|0.026000000000000002|
+----+--------+-----+--------------------+

谢谢

cnwbcb6i

cnwbcb6i1#

将列四舍五入到4位小数:

import pyspark.sql.functions as F
df = df.withColumn("res", F.round(F.col("res"), 4)
uemypmqf

uemypmqf2#

这些是浮点错误。一个简单的 1.1-1.0 给予 0.10000000000000009 在python(或pyspark)中。
你可以在这里或这个答案中找到更多关于他们的信息
四舍五入到适当的小数位似乎是解决这个问题的简单方法。

ljsrvy3e

ljsrvy3e3#

将其转换为浮动:

from pyspark.sql.functions import udf,explode
from pyspark.sql.types import StringType
table_schema = StructType([
     StructField("value", FloatType(), True)])
df= spark.createDataFrame(
    [
 ( 0.026000000000000002,)       
        ],table_schema
    )
df.show()

相关问题