Spark数据框过滤空值和空格

Posted

技术标签:

【中文标题】Spark数据框过滤空值和空格【英文标题】:Spark dataframe filter both nulls and spaces 【发布时间】:2016-12-31 06:57:37 【问题描述】:

我有一个 spark 数据框,我需要为它过滤特定列的空值和空格。

假设数据框有两列。 col2 既有空值也有空白。

col1   col2
1      abc
2      null
3      null
4   
5      def

我想过滤掉 col2 为空值或空白的记录。 任何人都可以帮助解决这个问题。

版本: Spark1.6.2 斯卡拉 2.10

【问题讨论】:

我可以像下面这样分别过滤掉空值和空白。 val df2 = df.filter("col2!= ''").filter(col("col2").isNotNull===true) 但我想在同一个过滤器表达式中包含这两个条件 @srinivas 根据我上面的评论,我要应用过滤器的列是相同的 您能否编辑您的评论。 这是更多的 SQL 方式! val df2 = df.filter("col2 != '' AND col2 is not null") 【参考方案1】:

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

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|
+----+----+

注意:根据您的 Spark 版本,您将需要 !===!=(后者是较新的选项)。

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

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

val filtered = myDF.filter(conds.reduce(_&&_))

【讨论】:

以上是关于Spark数据框过滤空值和空格的主要内容,如果未能解决你的问题,请参考以下文章

如何使用过滤器从scala中的数据框中获取包含空值的行集

计算Spark DataFrame中的非空值的数量

RODBC:为啥 sqlQuery() 中的空值和仅空格值的值为“NA”?

如何过滤数据表列的空值或空格

Spark数据框不添加具有空值的列

如何使用文本框搜索功能返回同一列中的空值和值