我正在 databricks 中进行以下计算,并四舍五入到小数点后两位。
result = (
round(
coalesce(
when(col('col') != 0, col('col')),
when(col('col') != 0, col('col')),
when(col('col') != 0, col('col')),
when(col('col') != 0, col('col'))
) * col('col4') +
when((col('col') > 0) & (col('col') > 0), col('col') * col('col')).otherwise(col('col')),
2
)
.alias('col')
)
我的代码工作正常,但对于一条记录,它没有正确四舍五入
示例 216.495 它应该四舍五入 216.50 ,在输出中显示 216.49
将列类型更改为
DoubleType
或转换为 DecimalType
缩放为 3
。
它给出了预期的结果。
from pyspark.sql.functions import col, coalesce, when,round
from pyspark.sql.types import StructType, StructField, DoubleType,FloatType,DecimalType
data = [
(216.495,)
]
schema = StructType([
StructField("col", DoubleType(), True)
])
df = spark.createDataFrame(data, schema=schema)
df.select(round(col("col"),2).alias("col")).display()
或者
data = [
(216.495,)
]
DecimalType()
schema = StructType([
StructField("col", FloatType(), True)
])
df = spark.createDataFrame(data, schema=schema)
df.select(round(col("col").cast(DecimalType(scale=3)),2)).display()
输出:
col |
---|
216.5 |