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

Spark DataFrame DoubleType列四舍五入函数失效,求排查错误

问题分析与解决

你的函数没生效的核心问题是循环中每次都基于原始的df_input生成新的df_output,而非基于上一次处理后的DataFrame。

比如你的DataFrame有col1、col2两个Double类型列:第一次循环处理col1时,df_output是修改了col1的新DataFrame;但第二次循环又用原始的df_input去修改col2,直接覆盖了之前对col1的修改,最后返回的df_output只保留了最后一个Double类型列的修改,其他列的四舍五入操作全被丢弃了。

修正后的代码

def round_df(df_input: DataFrame) -> DataFrame:
    # 先把df_output初始化为原始输入
    df_output = df_input
    # 遍历所有Double类型列
    for c in [f.name for f in df_input.schema.fields if isinstance(f.dataType, DoubleType)]:
        # 基于当前已处理的df_output继续修改,逐步累积操作
        df_output = df_output.withColumn(c, round(sf.col(c), 3))
    return df_output

额外优化(可选)

如果想简化代码,也可以用reduce函数一次性处理所有列,省去显式循环:

from functools import reduce
def round_df(df_input: DataFrame) -> DataFrame:
    double_cols = [f.name for f in df_input.schema.fields if isinstance(f.dataType, DoubleType)]
    return reduce(lambda df, col: df.withColumn(col, round(sf.col(col), 3)), double_cols, df_input)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:57:25