Deal with missing data
Spark SQL有一個DataFrameNaFunctions
可以很方便地處理missing data
DataFrameNaFunctions
這邊的NA指的是 missing value (跟程式沒關),而
NaN
跟null
是在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”