【问题标题】:Check if column contains missing values检查列是否包含缺失值
【发布时间】:2019-05-06 09:45:23
【问题描述】:

我正在编写一个验证函数,它应该检查:

  1. Dataset<Row> ds 具有列 col1col2。它也可能包含其他列。
  2. 验证col1col2 中没有缺失值(NaN、NULL、null 等)。

代码应该是 Java 代码。这是我到目前为止所拥有的

private static boolean isSleepDataValid(SparkSession spark, Dataset<Row> ds) {

    ds.createOrReplaceTempView("validityData");
    if (spark.sql("SELECT col1 FROM validityData WHERE col1 IS NULL").count() > 0) {
        return false;
    }
    if (spark.sql("SELECT col2 FROM validityData WHERE col2 IS NULL").count() > 0) {
        return false;
    }
    return true;
}

但是,这很丑陋,我正在寻找一种更好更清洁的方法。我想避免签名中的SparkSession spark 和函数体中的SQL。

【问题讨论】:

标签: java apache-spark


【解决方案1】:

要使用 Spark DSL,类似

return ds
  .filter(ds.col("col1").isNull().or(ds.col("col2").isNull()))
  .limit(1)
  .count() == 0;

请注意,limit 1 可能会在找到空值时提高效率。

【讨论】:

    【解决方案2】:

    怎么样,

    private static boolean isSleepDataValid(SparkSession spark, Dataset<Row> ds) {
         return (ds.count() == ds.na().drop().count()) 
    }
    

    ds.count() 返回总行数。 df.na().drop() 将删除包含 null 值的行。如果没有空值,则行数将相等,并且该方法将返回 true,否则返回 false。

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 2014-05-26
      • 1970-01-01
      • 2019-01-04
      • 2014-10-08
      • 2013-02-08
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多