检查列是否包含缺失值

时间:2019-05-06 09:45:23

标签: java apache-spark

我正在编写一个验证功能,该功能应检查以下内容:

  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。

2 个答案:

答案 0 :(得分:3)

要使用Spark DSL,类似

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

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

答案 1 :(得分:0)

怎么样,

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

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