在spark dataframe中筛选字符串数据,其中数据具有空值

kuarbcqp  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(676)

我正在寻找一种方法来使用Dataframe中有空数据的文件过滤器。下面是我的示例Dataframe,有两个字段:id和value。值字段中有空值。

val testData = Array((1,"actualstring1"),(2,null),(3,"actualstring2"),(4,"testString1"))
val testDataDF = sc.parallelize(testData).toDF("id", "value")

我使用下面的代码片段过滤掉测试字符串,假设输出有三条记录。令我惊讶的是,我只有以下两项记录:

testDataDF.filter(!col("value").contains("test")).show

结果如下:

+---+-------------+
| id|        value|
+---+-------------+
|  1|actualstring1|
|  3|actualstring2|
+---+-------------+

在这里我们看到 id=2 在此筛选过程中被忽略。我现在被困在如何包括行为 id=2 以及我们得到的两行的输出。
谢谢你的帮助

k5hmc34c

k5hmc34c1#

将当前条件替换为默认为 FALSE :

not(coalesce(col("value").contains("test"), lit(false))

哪里

lit(false)

是布尔文字,并且

coalesce(_, _)

返回第一个 NOT NULL 元素,从左边开始计数,或 NULL 如果这样的元素不存在。

j13ufse2

j13ufse22#

你可以测试一下 col("value") != null 在过滤器中:

testDataDF.filter(col("value") != null && !col("value").contains("test")).show

相关问题