博客
关于我
【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/

    你可能感兴趣的文章
    Ploly Dash,更新一个Dash应用程序JJJA上的实时人物
    查看>>
    Ploly烛台的定制颜色
    查看>>
    Ploly:如何在Excel中嵌入完全交互的Ploly图形?
    查看>>
    plotloss记录
    查看>>
    Plotly (Python) 子图:填充构面和共享图例
    查看>>
    Plotly 中的行悬停文本
    查看>>
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>