You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark如何根据另一列的精度值对指定列执行四舍五入计算

问题原因

PySpark 原生 Python API 提供的round()函数,第二个精度参数仅支持传入固定整数常量,不支持传入Column类型的动态列值,因此直接传f.col("reading_precision")会抛出Column is not iterable报错。

解决方法

方法1:使用expr调用SQL原生ROUND(推荐,无性能损失)

Spark SQL 层面的ROUND函数支持两个参数均为动态列,通过expr直接写SQL表达式即可实现需求:

import pyspark.sql.functions as f

df1 = df.withColumn("reading_value", f.expr("ROUND(summary_measure_value, reading_precision)"))

运行后输出结果和预期完全一致。

方法2:自定义UDF实现(仅做参考,性能低于原生方法)

如果需要扩展自定义四舍五入逻辑,可以用UDF实现:

import pyspark.sql.functions as f
from pyspark.sql.types import DoubleType

def dynamic_round(value, precision):
    return round(value, precision)

udf_round = f.udf(dynamic_round, DoubleType())
df1 = df.withColumn("reading_value", udf_round(f.col("summary_measure_value"), f.col("reading_precision")))

内容的提问来源于stack exchange,提问作者nmr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:24:05