【问题标题】:Filter String data in Spark dataframe where data has null values在数据具有空值的 Spark 数据框中过滤字符串数据
【发布时间】:2016-10-19 09:41:44
【问题描述】:

我正在寻找一种对 DataFrame 中具有空数据的字段使用过滤器的方法。 下面是我的示例 DataFrame,其中包含两个字段:id 和 value。 value 字段中有一个空值。

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

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

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

结果如下:

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

这里我们看到id=2 的记录在这个过滤过程中被忽略了。 我现在坚持如何在输出中包含id=2 的行以及我们得到的两行。

感谢任何帮助

【问题讨论】:

    标签: apache-spark dataframe apache-spark-sql


    【解决方案1】:

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

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

    在哪里

    lit(false)
    

    是一个布尔字面量,并且

    coalesce(_, _)
    

    返回第一个 NOT NULL 元素,从左边数起,如果不存在则返回 NULL

    【讨论】:

      【解决方案2】:

      您可以在过滤器中测试col("value") != null

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多