博客
关于我
【SparkSQL 】扩展 ---- 数据清洗:缺失值处理
阅读量:325 次
发布时间:2019-03-04

本文共 2012 字,大约阅读时间需要 6 分钟。

数据清洗:缺失值处理

缺失值在数据分析中是一个常见的问题,处理不当可能导致分析结果偏差。SparkSQL 提供了强大的数据处理框架,能够有效应对缺失值问题。本文将详细介绍缺失值的定义、产生类型以及处理方法。

一、缺失值的含义

缺失值是指数据中缺失的值,通常表示该值本身无意义或未能获取。常见的表示方式包括 null、空字符串('')、NAN(Not a Number,非数值)等。在数据处理中,缺失值可能导致分析结果误差或计算异常。

举例说明
  • null:对象为空,表示缺失值。
  • NAN:表示数值数据中的无效值。

二、缺失值的产生

缺失值可能来自多个来源:

  • 业务系统:数据生成过程中未能获取相关信息。
  • 数据处理工具:其他工具在转换数据时未能处理特殊情况。
  • 三、缺失值的类型

    缺失值可按类型分类:

  • 数据类型缺失:如 Integer 列中出现 null
  • 数值缺失:如 Double 列中出现 NAN
  • 字符串缺失:如 StringType 列中出现空值。

  • DataFrameNaFunctions 缺失值处理框架

    在处理缺失值时,SparkSQL 提供了 DataFrameNaFunctions框架,支持两种主要方式:

  • 丢弃:移除包含缺失值的记录。
  • 替换:将缺失值替换为指定值。
  • DataFrameNaFunctions 的具体方法

    • drop:移除包含缺失值的行。

      • df.na.drop("all"):仅移除全为 null 的记录。
      • df.na.drop("any"):移除包含任意一列为 null 的记录。
      • 列指定:如 df.na.drop("any", List("year", "month")),仅移除 yearmonth 列中存在 null 的记录。
    • fill:替换缺失值。

      • df.na.fill(0):将所有缺失值替换为 0
      • df.na.fill(0, List("year", "month")):仅替换 yearmonth 列的缺失值。
    • replace:按值替换缺失值。

      • df.na.replace("PM_Dongsi", Map("NA" -> "NaN", "NULL" -> "null")):替换特定字段的特定值。

    NaN 、null 缺失值的处理

    例子:PM 数据中包含 NaN 值的处理

  • 读取数据

    • 方式一:val ds = spark.read.option("header", true).option("inferSchema", true).csv("dataset/beijing_pm_nan.csv")
    • 方式二:spark.read.option("header", true).csv().map(row -> row...)
    • 方式三:val schema = StructType(...),并指定数据类型。
  • 丢弃 NaN 记录

    • df.na.drop("all")df.na.drop("any")df.na.drop("any", List("year", "month"))
  • 填充 NaN

    • df.na.fill(0):默认填充。
    • df.na.fill(0, List("year", "month")):指定列填充。

  • 字符串缺失值的处理

    例子:PM_Dongsi 列中的 NA 值处理

  • 读取数据

    • val df = spark.read.option("header", true).option("inferSchema", true).csv("dataset/BeijingPM20100101_20151231.csv")
  • 处理方法

    • 丢弃df.where('PM_Dongsi =!= "NA").show()
    • 替换
      import org.apache.spark.sql.functions._df.select(  'No as "id", 'year, 'month, 'day, 'hour, 'season,  when('PM_Dongsi === "NA", Double.NaN)     .otherwise('PM_Dongsi cast DoubleType)     .as("pm")).show()
    • 特殊值替换
      val data_NA = df.na.replace("PM_Dongsi", Map("NA" -> "NaN", "NULL" -> "null"))val type_trs = data_NA.select('No.as("id"), 'year, 'month, 'day, 'season, 'PM_Dongsi.cast(DoubleType))type_trs.na.fill(0).show()

  • 通过以上方法,SparkSQL 提供了灵活的缺失值处理方案,确保数据质量和分析准确性。

    转载地址:http://zzeq.baihongyu.com/

    你可能感兴趣的文章
    Qt笔记——QSemaphore处理生产者/消费者模式
    查看>>
    Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
    查看>>
    Qt笔记——QLable+QPixmap图片缩放踩坑
    查看>>
    Qt笔记——foreach与forever
    查看>>
    QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
    查看>>
    Qt知识:视图框架QGraphicsWidget详解
    查看>>
    SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
    查看>>
    Qt知识: 画刷风格
    查看>>
    QT的OpenGL渲染窗QOpenGLWidget Class
    查看>>
    QT的C++程序加载动态链接库DLL(Linux下是so)的方式
    查看>>
    QT界面操作1:如何跟踪鼠标位置?
    查看>>
    Qt环境搭建(Visual Studio)
    查看>>
    QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
    查看>>
    QT样式表——url路径
    查看>>
    QT数据库(三):QSqlQuery使用
    查看>>
    QT教程5:消息框
    查看>>
    SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
    查看>>
    pom.xml中提示web.xml is missing and <failonmissingw>...
    查看>>
    Pomelo开发中Web客户端开发API简介
    查看>>
    QT教程2:QT5的体系构架
    查看>>