本文共 2018 字,大约阅读时间需要 6 分钟。
缺失值在数据分析中是一个常见的问题,处理不当可能导致分析结果偏差。SparkSQL 提供了强大的数据处理框架,能够有效应对缺失值问题。本文将详细介绍缺失值的定义、产生类型以及处理方法。
缺失值是指数据中缺失的值,通常表示该值本身无意义或未能获取。常见的表示方式包括 null、空字符串('')、NAN(Not a Number,非数值)等。在数据处理中,缺失值可能导致分析结果误差或计算异常。
缺失值可能来自多个来源:
缺失值可按类型分类:
Integer 列中出现 null。Double 列中出现 NAN。StringType 列中出现空值。在处理缺失值时,SparkSQL 提供了 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")):替换特定字段的特定值。读取数据
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")):指定列填充。读取数据
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/