如何使用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
相关产品推荐
相关产品推荐

