Провел тест с тем же кодом, и он отлично работает, см. Пример ниже:
import pyspark.sql.functions as f
from pyspark import Row
from pyspark.shell import spark
df = spark.createDataFrame([
Row(em=3.45631),
Row(em=2.82945),
Row(em=7.76261),
Row(em=2.76790)
])
df = df.withColumn('rounded', f.round(f.col('em'), 3))
df.show()
Выход:
+-------+-------+
| em|rounded|
+-------+-------+
|3.45631| 3.456|
|2.82945| 2.829|
|7.76261| 7.763|
| 2.7679| 2.768|
+-------+-------+
UPDATE
Фактически, его плавающие значения содержат показатели E9
и E8
. Например, значение 1.14209626E9
равно 1142096260
.
Чтобы округлить их, необходимо разделить значение на 1e9
, а затем вызвать функцию round
.
См. Пример ниже:
import pyspark.sql.functions as f
from pyspark import Row
from pyspark.shell import spark
df = spark.createDataFrame([
Row(em=1.14209626E9),
Row(em=1.25046528E9),
Row(em=9.5720672E8)
])
df = df.withColumn('rounded', (f.round(f.col('em') / 1e9, 3)) * 1e9)
df.show()
Выход:
+------------+-------+
| em|rounded|
+------------+-------+
|1.14209626E9|1.142E9|
|1.25046528E9| 1.25E9|
| 9.5720672E8| 9.57E8|
+------------+-------+