RDD案例数据清洗

在 Spark 中,RDD(Resilient Distributed Dataset)是分布式数据集的基本抽象。数据清洗是数据预处理中的一个重要步骤,通常包括去除重复数据、过滤无效数据、转换数据格式等操作。以下是一个使用 RDD 进行数据清洗的完整示例。

示例场景

假设我们有一个包含用户信息的文本文件 users.txt,每行是一个用户记录,格式如下:

复制代码
user1,25,China
user2,30,USA
user3,invalid,Australia
user4,22,China
user5,28,USA
user6,35,invalid

我们需要对数据进行清洗,包括:

  1. 过滤掉无效的年龄数据(非数字或不在合理范围)。
  2. 过滤掉无效的国家数据(只保留指定的国家,如 ChinaUSA)。
  3. 去除重复的用户记录。

实现步骤

  1. 创建 SparkContext:初始化 Spark 环境。
  2. 读取数据:从文件中加载数据到 RDD。
  3. 数据清洗:过滤无效数据和重复数据。
  4. 保存结果:将清洗后的数据保存到文件。

以下是完整的代码实现:

scala 复制代码
import org.apache.spark.{SparkConf, SparkContext}

object DataCleaning {
  def main(args: Array[String]): Unit = {
    // 初始化 Spark 环境
    val conf = new SparkConf()
      .setAppName("DataCleaning")
      .setMaster("local[*]") // 使用本地模式运行
    val sc = new SparkContext(conf)

    // 读取数据
    val inputPath = "path/to/users.txt"
    val rawData = sc.textFile(inputPath)

    // 数据清洗
    val cleanedData = rawData
      .map(line => line.split(",")) // 将每行数据分割为数组
      .filter(arr => arr.length == 3) // 确保每行有三个字段
      .filter(arr => {
        // 过滤无效年龄数据
        val age = try {
          arr(1).toInt
        } catch {
          case _: NumberFormatException => -1
        }
        age >= 18 && age <= 100 // 假设年龄范围为 18 到 100
      })
      .filter(arr => {
        // 过滤无效国家数据
        val country = arr(2)
        country == "China" || country == "USA"
      })
      .map(arr => (arr(0), arr(1), arr(2))) // 转换为元组
      .distinct() // 去除重复记录

    // 保存清洗后的数据
    val outputPath = "path/to/cleaned_users.txt"
    cleanedData.saveAsTextFile(outputPath)

    // 停止 SparkContext
    sc.stop()
  }
}

代码说明

  1. 初始化 Spark 环境

    • 使用 SparkConf 配置 Spark 应用程序的名称和运行模式(本地模式)。
    • 创建 SparkContext 实例。
  2. 读取数据

    • 使用 sc.textFile 方法从指定路径加载数据到 RDD。
  3. 数据清洗

    • 使用 map 方法将每行数据分割为数组。
    • 使用 filter 方法过滤无效的年龄数据和国家数据。
    • 使用 distinct 方法去除重复记录。
  4. 保存结果

    • 使用 saveAsTextFile 方法将清洗后的数据保存到指定路径。

示例输入和输出

输入文件 users.txt
复制代码
user1,25,China
user2,30,USA
user3,invalid,Australia
user4,22,China
user5,28,USA
user6,35,invalid
user1,25,China
输出文件 cleaned_users.txt
复制代码
user1,25,China
user2,30,USA
user4,22,China
user5,28,USA

运行项目

  1. 将上述代码保存为 DataCleaning.scala 文件。
  2. 在 IntelliJ IDEA 中运行该程序。
  3. 查看输出文件 cleaned_users.txt,确保数据清洗结果正确。

通过以上步骤,你可以使用 Spark 的 RDD API 完成数据清洗任务。

相关推荐
RFID科技的魅力1 小时前
RFID资产管理系统选型避坑指南:从需求梳理到落地验证
大数据·人工智能·物联网·rfid
小猴子下山1232 小时前
2026年无锡细胞存储市场格局观察:四家企业的传承脉络与业务分野
大数据·人工智能·精选
2503_931712483 小时前
中小学课桌椅/报告厅座椅/大学教室桌椅/校园课桌椅/高校阶梯教室排椅公司优选
大数据
蓝速科技3 小时前
蓝速科技三色灯光会议预约门牌深度评测
大数据·人工智能·科技
Data-Miner4 小时前
某集团数字化转型蓝图规划:94页案例ppt深度拆解!
大数据
QiLinkOS5 小时前
第三视觉理解徐玉生与他的商业活动(28)
大数据·c++·人工智能·算法·开源协议
2401_859506246 小时前
AIGC赋能大漆摆件设计:从痛点分析到技术架构与实战验证
java·大数据·人工智能
堆焊工艺分享6 小时前
2026-2030工业堆焊行业发展趋势:从维修辅业到智造核心工艺
大数据·人工智能
Evand J6 小时前
【论文复现】MATLAB例程,存在测距误差的WSN无锚点分布式自定位,《WSN中存在测距误差的无锚点分布式自定位方法》
开发语言·分布式·matlab·定位·导航·wsn
littlebigbar6 小时前
功能测试中的“精准打击“:避免大而全的实用策略 (2)
大数据