博客
关于我
【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教程2:QT5的体系构架
    查看>>
    PON架构(全光网络)
    查看>>
    PoolingHttpClientConnectionManager原理剖析
    查看>>
    QT教程1:ubuntu18.04安装QT5
    查看>>
    POP-一个点击带有放大还原的动画效果
    查看>>
    POP3 协议在计算机网络中的优缺点
    查看>>
    qt批量操作同类型控件
    查看>>
    Portaudio笔记-WASAPI
    查看>>
    position:fixed失效情况
    查看>>
    Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
    查看>>
    Position属性四个值:static、fixed、absolute和relative的区别和用法
    查看>>
    POSIX thread编程中关于临界区内条件变量的分析
    查看>>
    POSIX与程序可移植性
    查看>>
    posix多线程有感--自旋锁
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    POSIX标准和XSI扩展
    查看>>
    post install error,please remove node_moules before retry
    查看>>
    postcss-pxtorem 参数之selectorBlackList、exclude的用法
    查看>>
    Postek博思得标签打印机更换电脑,打印出来标签空白
    查看>>
    postfix+ dovecot搭建邮件服务器
    查看>>