Spark 中的列乘法

Column Multiplication in Spark

我正在尝试将 Spark 中的两列相乘。两列都是 Double 类型。 26.0 和 0.001 之间的乘法结果是 0.026000000000000002 而不是 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|
+----+--------+-----+--------------------+

谢谢

将其转换为浮点数:

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()

列舍入到 4 位小数:

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

这些是浮点错误。 一个简单的 1.1-1.0 在 Python(或 Pyspark)中给出 0.10000000000000009
您可以找到有关它们的更多信息 here or in this Whosebug answer

四舍五入到适当的小数位似乎是解决这个问题的简单方法。