我正在编写一个验证功能,该功能应检查以下内容:
Dataset<Row> ds
具有列col1
和col2
的列。它还可能包含其他列。col1
和col2
中是否没有缺失值(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。
答案 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。