在pyspark 2.4中铸造科学字符串使其浮动会产生舍入误差

在pyspark 2.4中铸造科学字符串使其浮动会产生舍入误差,pyspark,Pyspark,我有一个pyspark数据框,我想在其中向另一个数值添加一个数值。当原始数值从科学符号字符串格式化为双精度时,它工作,当格式化为浮点时,它给出舍入误差 def updateValue(value): return (value + 10) updateValueUdf_double = udf(updateValue, DoubleType()) updateValueUdf_float = udf(updateValue, FloatType()) // create simple

我有一个pyspark数据框,我想在其中向另一个数值添加一个数值。当原始数值从科学符号字符串格式化为双精度时,它工作,当格式化为浮点时,它给出舍入误差

def updateValue(value):
   return (value + 10)

updateValueUdf_double = udf(updateValue, DoubleType())
updateValueUdf_float = udf(updateValue, FloatType())

// create simple dataframe
data = [(0, "1E8")]
df = sqlContext.createDataFrame(data, ["row", "value"])

df2 = df.withColumn("value_d", col("value").cast("double"))\
.withColumn("value_du", updateValueUdf_double("value_d"))\
.withColumn("value_f", col("value").cast("float"))\
.withColumn("value_fu", updateValueUdf_float("value_f"))

df2.show(n=2)
当我运行上述代码时,它为value_du提供了正确的值,但为value_fu提供了不正确的值,请参见下文。这是预期的行为,我应该始终使用DoubleType吗

+---+-----+-------+-----------+-------+------------+
|row|value|value_d|   value_du|value_f|    value_fu|
+---+-----+-------+-----------+-------+------------+
|  0|  1E8|  1.0E8|1.0000001E8|  1.0E8|1.00000008E8|
+---+-----+-------+-----------+-------+------------+