Приведение научной строки для плавания в pyspark 2.4 дает ошибку округления - PullRequest
1 голос
/ 21 марта 2019

У меня есть фрейм данных 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|
+---+-----+-------+-----------+-------+------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...