Spark/Scala:移除列中指定值与重复分隔值并统计数量
在Scala中清理DataFrame的EngineType列:移除特定值与重复项
假设你已经有一个Spark DataFrame,结构如下:
+-----------------+----------------------------+ |Race_Track | EngineType | +----------------------------------------------+ |800-RDUO | 881,652,EWQ,300x,652,PXZ | +----------------------------------------------+
需要完成两个操作:移除指定值(比如EWQ),同时去掉重复的元素,最终得到:
+-----------------+----------------------------+ |Race_Track | EngineType | +----------------------------------------------+ |800-RDUO | 881,300x,652,PXZ | +----------------------------------------------+
实现步骤
- 导入Spark SQL相关函数库
- 通过拆分字符串→过滤指定值→数组去重→重新拼接的流程处理目标列
完整代码示例
import org.apache.spark.sql.functions._ import spark.implicits._ // 模拟原始DataFrame val df = Seq( ("800-RDUO", "881,652,EWQ,300x,652,PXZ") ).toDF("Race_Track", "EngineType") // 定义需要移除的特定值 val excludeValue = "EWQ" // 处理EngineType列 val cleanedDf = df.withColumn("EngineType", split(col("EngineType"), ",") // 按逗号拆分字符串为数组 .filter(_ =!= excludeValue) // 过滤掉指定值 .distinct // 对数组内元素去重 .mkString(",") // 将处理后的数组重新拼接为字符串 ) // 查看清理后的结果 cleanedDf.show(false)
代码细节说明
split(col("EngineType"), ","):把EngineType字段的字符串按逗号分割成字符串数组filter(_ =!= excludeValue):剔除数组中等于目标排除值的元素distinct:去除数组内的重复元素,保证每个值仅出现一次mkString(","):将处理后的数组重新组合成逗号分隔的字符串
运行上述代码后,即可得到符合需求的清理后DataFrame。
内容的提问来源于stack exchange,提问作者luckyluke
相关产品推荐
相关产品推荐

