Java 检查列是否包含缺少的值

Java 检查列是否包含缺少的值,java,apache-spark,Java,Apache Spark,我正在编写一个验证函数,它应该检查: 数据集ds具有列col1和col2。它还可能包含其他列 验证col1和col2中是否没有缺失值(NaN、NULL、NULL等) 代码应该是Java代码。这是我到目前为止所拥有的 private静态布尔值isSleepDataValid(SparkSession spark,数据集ds){ ds.createOrReplaceTempView(“validityData”); if(spark.sql(“从validityData中选择col1,其中col1为

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

  • 数据集ds
    具有列
    col1
    col2
    。它还可能包含其他列
  • 验证
    col1
    col2
    中是否没有缺失值(NaN、NULL、NULL等)
  • 代码应该是Java代码。这是我到目前为止所拥有的

    private静态布尔值isSleepDataValid(SparkSession spark,数据集ds){
    ds.createOrReplaceTempView(“validityData”);
    if(spark.sql(“从validityData中选择col1,其中col1为NULL”).count()>0){
    返回false;
    }
    if(spark.sql(“从validityData中选择col2,其中col2为NULL”).count()>0){
    返回false;
    }
    返回true;
    }
    

    然而,这是丑陋的,我正在寻找一个更好和更干净的方式。我希望避免签名中使用SparkSession spark,函数体中使用SQL

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

    请注意,当发现空值时,
    限制1
    可能会提高效率。

    使用Spark DSL,例如

    return ds
      .filter(ds.col("col1").isNull().or(ds.col("col2").isNull()))
      .limit(1)
      .count() == 0;
    
    请注意,当发现空值时,
    限制1
    可能会提高效率。

    如何

    private static boolean isSleepDataValid(SparkSession spark, Dataset<Row> ds) {
         return (ds.count() == ds.na().drop().count()) 
    }
    
    private静态布尔值isSleepDataValid(SparkSession spark,数据集ds){
    返回(ds.count()==ds.na().drop().count())
    }
    
    ds.count()
    返回总行数。
    df.na().drop()
    将删除包含null值的行。如果没有空值,行数将相等,方法将返回true,否则返回false

    怎么样

    private static boolean isSleepDataValid(SparkSession spark, Dataset<Row> ds) {
         return (ds.count() == ds.na().drop().count()) 
    }
    
    private静态布尔值isSleepDataValid(SparkSession spark,数据集ds){
    返回(ds.count()==ds.na().drop().count())
    }
    
    ds.count()
    返回总行数。
    df.na().drop()
    将删除包含null值的行。如果没有空值,行数将相等,方法将返回true,否则返回false

    也许这有帮助(尽管在python中):也许这有帮助(尽管在python中):