Spark处理过程-案例数据清洗

++++什么是数据清洗?++++

数据清洗是指在数据分析或处理之前,对原始数据进行预处理,以消除错误、不一致、重复或缺失的数据,从而提高数据的质量和可用性。数据清洗是数据科学和数据分析中至关重要的一步,因为低质量的数据会导致错误的结论和决策。

假设你有一个包含用户信息的文本文件,每行格式为 姓名,年龄,性别,需要清洗掉年龄为空或者非数字的行

以下是 10 条符合上述示例中数据格式(姓名,年龄,性别)的测试数据,包含了一些可能需要清洗掉的无效数据,你可以将其保存为一个文本文件,用于测试上面的数据清洗程序。

【++++教师展示要清洗的数据,请同学们观察,并回答应该要清洗掉哪些数据?++++ 】

张三,25,男

李四,,女

王五,30,男

赵六,a,女

孙七,35,男

周八,40,女

吴九,abc,男

郑十,45,女

王十,50,男

李二,55,女

这里面:"李四" 的年龄为空,"赵六" 和 "吴九" 的年龄不是有效的数字,在执行数据清洗程序时,这些行应该会被过滤掉。


实现这个问题的思路是什么?

  1. 读入文件
  2. 对每一行数据进行分析
    1. 字段拆分,拆分出年龄这个字段
    2. 判断
      • 如果它不是数字或者缺失,则忽略这条数据
  • 否则保存
  1. 如何读入txt文件?
  2. 如何拆分出一行中的年龄?
  3. 如何使用过滤算子(filter)?
  4. 如何判断是否是整数?

  1. 读入txt文件。 val lines = sc.textFile(inputFile)
  2. 对拆分出一行中的年龄。val fields = line.split(",") fields(0)
  3. 过滤算子中,函数返回为false,就会被过滤掉,函数返回为true,就会被保留下来。
  4. 使用正则表达式。/\d/

java 复制代码
// 1.读入文件
// 2.开始过滤,对每一行数据进行分析
// (1)字段拆分,拆分出年龄这个字段
// (2)判断
//    ①如果它不是数字或者缺失,则忽略这条数据
// ②否则保存
  // 3.保存过滤之后的文件
import org.apache.spark.{SparkConf, SparkContext}
object DataCleaning {
  def main(args: Array[String]): Unit = {
    // 创建 SparkConf 对象
    val conf = new SparkConf().setAppName("DataCleaning").setMaster("local[*]")
    // 创建 SparkContext 对象
    val sc = new SparkContext(conf)
 
    // 读取文本文件,创建 RDD
    val inputFile = "input/file.txt"
    val lines = sc.textFile(inputFile)
 
    // 数据清洗操作
    val cleanedLines = lines.filter(line => { // 使用filter算子
      val fields = line.split(",")
      if (fields.length == 3) {
        val age = fields(1).trim
        age.matches("\\d+")
      } else {
        false
      }
    })
      // 输出清洗后的数据
       cleanedLines.collect().foreach(println)
 
    // 停止 SparkContext
    sc.stop()
  }
} 

这里介绍一个拓展点:如何把清洗之后的数据保存到一个文件中。

可以使用coalesce(1)这个方法可以让结果全部保存在一个文件中

java 复制代码
val singlePartitionRDD = cleanedLines.coalesce(1)
    // 保存清洗后的数据到文件
    val outputPath = "path/to/your/output/file.txt"
    singlePartitionRDD.saveAsTextFile(outputPath)
    // 停止 SparkContext
    sc.stop()
相关推荐
极光代码工作室14 天前
基于数据仓库的电商数据分析平台
大数据·hadoop·python·spark·数据可视化
JLWcai2025100914 天前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm
ACP广源盛1392462567314 天前
GSV9001S@ACP#1080P 级视频处理芯片,物理 AI 普及终端的高性价比选择
大数据·人工智能·分布式·嵌入式硬件·spark
木心术114 天前
AMD Ryzen AI Halo与NVIDIA RTX Spark/DGX Spark两款AI个人主机的差异和优劣势
大数据·人工智能·spark
ACP广源盛1392462567315 天前
GSV5600@ACP#多接口协议转换芯片,物理 AI 便携终端的互联核心
大数据·人工智能·分布式·嵌入式硬件·spark
KaMeidebaby15 天前
卡梅德生物技术快报 | 噬菌体展示 12 肽文库在蛋白表位定位中的应用与实验数据
大数据·人工智能·架构·spark·新浪微博
ACP广源盛1392462567316 天前
GSV2221@ACP#DP 1.4 MST 多屏转换芯片,物理 AI 多模态交互的视觉中枢
大数据·人工智能·嵌入式硬件·gpt·spark
想ai抽16 天前
Spark Executor 因节点内存超限被杀的分析与应对
大数据·性能优化·spark
simidagogogo16 天前
生产环境推荐系统最隐蔽的坑:Training-Serving Skew 详解与实战
算法·spark·推荐算法
ACP广源盛1392462567316 天前
GSV6155@ACP#DP 1.4a 重定时器芯片,物理 AI 信号长距传输的稳定保障
大数据·人工智能·分布式·嵌入式硬件·spark