Spark数据帧过滤空值和空格

Ram*_*esh 3 scala apache-spark-sql

我有一个spark数据帧,我需要为特定列过滤空值和空格.

可以说dataframe有两列.col2既有空值也有空格.

col1   col2
1      abc
2      null
3      null
4   
5      def
Run Code Online (Sandbox Code Playgroud)

我想应用过滤掉col2为空或空白的记录.任何人都可以帮忙解决这个问题.

版本:Spark1.6.2 Scala 2.10

eva*_*man 8

标准逻辑运算符在Spark上定义Column:

scala> val myDF = Seq((1, "abc"),(2,null),(3,null),(4, ""),(5,"def")).toDF("col1", "col2")
myDF: org.apache.spark.sql.DataFrame = [col1: int, col2: string]

scala> myDF.show
+----+----+
|col1|col2|
+----+----+
|   1| abc|
|   2|null|
|   3|null|
|   4|    |
|   5| def|
+----+----+


scala> myDF.filter(($"col2" =!= "") && ($"col2".isNotNull)).show
+----+----+
|col1|col2|
+----+----+
|   1| abc|
|   5| def|
+----+----+
Run Code Online (Sandbox Code Playgroud)

注意:根据您需要的Spark版本!===!=(后者是更新的选项).

如果你n有条件要满足我可能会使用一个列表来减少布尔列:

val conds = List(myDF("a").contains("x"), myDF("b") =!= "y", myDF("c") > 2)

val filtered = myDF.filter(conds.reduce(_&&_))
Run Code Online (Sandbox Code Playgroud)