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


Dataset<Row> ds具有列col1col2。它也可能包含其他列。
验证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。

最佳答案

要使用Spark DSL,类似

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


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

10-07 16:20
查看更多