Deal with missing data

Spark SQL有一個DataFrameNaFunctions可以很方便地處理missing data

DataFrameNaFunctions

這邊的NA指的是 missing value (跟程式沒關),而NaNnull是在scala裡面會看到的資料。 在文件裡面,會用 null or NaN 這兩個字,例如: “Returns a new DataFrame that drops rows containing any null or NaN values in the specified columns.”。 在 DataFrameNaFunctions 沒有區分NaN與null,一律當做missing value處理。

DataFrameNaFunctions有三種方法:

  • drop: 把有NA的row刪掉
  • fill: 把NA用指定的資料填滿
  • replace: 這個跟NA沒關係。把一個值用另一個值取代,例如 “N” -> “UNKNOWN”

dataframe.na取得DataFrameNaFunctions

val df = spark.read
    .parquet("hdfs://namenode-0.hdfs.mesos:9001/parquet/ehave.parquet")
val newDf = df.na.drop()

drop

把有NA的row刪掉

drop mode

  • any: 一個row如果有任何一個NA,則drop
  • all: 一個row如果全部欄位都是NA,則drop

口訣: drop if any column is NA, drop if all the columns is NA

// 預設any
val dfWithoutNA = df.na.drop()
val dffWithoutDummyData = df.na.drop("all")

指定欄位

只會檢查指定欄位中的NA

// df2的col1與col2**不會有**NA
val df2 = df.na.drop(Array("col1", "col2"))

// df3的col1與col2**不會都是**NA
val df3 = df.na.drop("all", Array("col1", "col2"))

以下施工中,請看DataFrameNaFunctions

fill

把NA用指定的資料填滿


replace

這個跟NA沒關係。把一個值用另一個值取代,例如 “N” -> “UNKNOWN”

more!