博客
关于我
【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")),仅移除 year 和 month 列中存在 null 的记录。
    • fill:替换缺失值。

      • df.na.fill(0):将所有缺失值替换为 0。
      • df.na.fill(0, List("year", "month")):仅替换 year 和 month 列的缺失值。
    • 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/

    你可能感兴趣的文章
    Python接口自动化测试实战系列
    查看>>
    python下载_安装_配置_以及第一行python程序---python工作笔记009
    查看>>
    Python不协调机器人消息.内容
    查看>>
    Python与C#之间内存共享互传信息
    查看>>
    python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
    查看>>
    python与excel
    查看>>
    Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
    查看>>
    python与flask_Python编程中flask的简介与简单使用
    查看>>
    python与图灵机器人交互(WXPY版本)
    查看>>
    python与运算符_python运算符
    查看>>
    python两个列表获取交集,并集,差集
    查看>>
    python两个字典合并,两个list合并
    查看>>
    Python两个版本共存时,命令行升级pip
    查看>>
    Python两个版本共存时,怎么验证是否安装成功 scrapy
    查看>>
    Python两个版本共存时,通过pip安装Scrapy
    查看>>
    python两组变量的相关关系散点图_变量是什么?变量间的两种关系——函数关系和相关关系(小学版)...
    查看>>
    Python中 pass语句的作用
    查看>>
    python中 urllib, urllib2, httplib, httplib2 几个库的区别
    查看>>
    python中 yaml库 & json库 & xmltodict库使用
    查看>>
    python中 将你的名字转化成为二进制并输出
    查看>>