在Scala中,Double類型的空值保存爲NaN,其餘保存爲null。對於Double能夠直接使用:bianliang.isNaN判斷其是不是空值,那麼在一個多行多列的DataSet或者DataFrame中怎麼進行處理呢。sql
1、幾種查找空值的方法
一、Column方法
column.isNull/column.isNotNull/column.isNaN
- df("col1").isNull
- df.filter(df("col1").isNull)就能夠獲取全部col1列爲空值的行了。
- //獲取col1字段全部空列
- df.filter(df("col1").isNull).count()
- df.filter(df("col1").isNotNull).count()
二、類sql方法
- //獲取col1字段全部空列
- data1.filter("col1 is null").select("col1").limit(10).show
- //獲取col1字段的全部非空列
- data1.filter("col1 is not null").select("col1").limit(10).show
- data1.filter("col1 <>''").select("col1").limit(10).show
2、na方法
- val naDF:DataFrameNaFunctions=df.na
調用na方法會返回一個DataFrameNaFunctions。其只有3個方法,drop、fill、replace。spa
2.1 na.drop方法
2.1.1 刪除全部列的空值以及NaN
- val resNull=df.na.drop()
返回一個新DF,剔除了包含空值的行。blog
2.1.2 刪除某一列的空值和NaN
- val res =df.na.drop(Array("col1","col2"))
2.1.3 刪除某一列的非空非NaN可是值低於10的。
- df.na.drop(10,Array("col1","col2"))
2.2 na.fill方法
2.2.1 填充全部空值的列
- val res123=df.na.fill("新值")
- val res123=df.na.fill(10)
2.2.2 對指定的空值進行填充
傳入一個值,以及全部須要用此值填充的Array,或者使用Map,按照列進行不一樣填充。it
- val res2=data1.na.fill(value="wangxiao111",cols=Array("gender","yearsmarried") )
- val res3=data1.na.fill(Map("gender"->"wangxiao222","yearsmarried"->"wangxiao567") )
2.3 na.replace方法
2.3.1 將指定列的指定值替換爲對應的值
- df.na.replace("col1",Map(1->2)) //將col1列的值爲1替換爲2.
- df.na.replace(Array("col1","col2"),Map(1->2))
- df.na.replace[Int]("col1",Map(1->2))//能夠添加泛型,Map中的key和value類型必須與其保持一致。