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

如何使用Scala和Spark将DataFrame列中的负值替换为0

使用Scala + Spark将DataFrame中的负值替换为0

输入DataFrame:

Col1   Col2   Col3   Col4      Col5      Col6
1   1982      0      0   -211       107         0
2   4412      0    989      0       296         0
3      0  -5051      0   -267       389       920
4      0  -2983      0   -215         0      1639
5      0  -1326      0   -861         0         0
6   3722      0     89      0       243     13349

解决方案代码

首先导入Spark SQL的必要函数:

import org.apache.spark.sql.functions.{col, when}

方法一:批量处理所有列(推荐)

直接遍历DataFrame的所有列,对每一列应用“负值替换为0”的逻辑:

// 获取所有列名
val allColumns = df.columns

// 生成处理后的列表达式,批量替换负值
val processedColumns = allColumns.map(colName => 
  when(col(colName) < 0, 0).otherwise(col(colName)).alias(colName)
)

// 生成处理后的DataFrame
val resultDf = df.select(processedColumns: _*)

方法二:逐列迭代处理

使用foldLeft逐列更新DataFrame:

val resultDf = df.columns.foldLeft(df) { (tempDf, colName) =>
  tempDf.withColumn(colName, when(col(colName) < 0, 0).otherwise(col(colName)))
}

处理后的结果DataFrame:

Col1   Col2   Col3   Col4      Col5      Col6
    1   1982      0      0     0       107         0
    2   4412      0    989     0       296         0
    3      0      0      0     0       389       920
    4      0      0      0     0         0      1639
    5      0      0      0     0         0         0
    6   3722      0     89     0       243     13349

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:19:58