小编gre*_*hor的帖子

为什么过滤器默认在Spark数据帧上删除空值?

filter在包含null值的基本scala集合上,具有以下(且非常直观)的行为:

scala> List("a", "b", null).filter(_ != "a")
res0: List[String] = List(b, null)
Run Code Online (Sandbox Code Playgroud)

但是,我很惊讶地发现以下过滤器删除了火花数据帧中的空值:

scala> val df = List(("a", null), ( "c", "d")).toDF("A", "B")
scala> df.show
+---+----+
|  A|   B|
+---+----+
|  a|null|
|  c|   d|
+---+----+
scala> df.filter('B =!= "d").show
+---+---+
|  A|  B|
+---+---+
+---+---+
Run Code Online (Sandbox Code Playgroud)

如果要保留null值,我应该添加

df.filter('B =!= "d" || 'B.isNull).show
+---+----+
|  A|   B|
+---+----+
|  a|null|
+---+----+
Run Code Online (Sandbox Code Playgroud)

就个人而言,我认为默认情况下删除空值非常容易出错。为什么选择这个?为何在api文档中未明确说明?我想念什么吗?

sql null apache-spark spark-dataframe

6
推荐指数
1
解决办法
641
查看次数

标签 统计

apache-spark ×1

null ×1

spark-dataframe ×1

sql ×1