Проверьте, содержит ли столбец пропущенные значения - PullRequest
0 голосов
/ 06 мая 2019

Я пишу функцию проверки, которая должна проверить, что:

  1. A Dataset<Row> ds имеет столбцы col1 и col2. Может содержать и другие столбцы.
  2. Убедитесь, что в col1 и col2.

Код должен быть кодом 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 ]

2 голосов
/ 06 мая 2019

Чтобы использовать Spark DSL, что-то вроде

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

Обратите внимание, что limit 1 может повысить эффективность при обнаружении нулевых значений.

0 голосов
/ 06 мая 2019

Как насчет,

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

ds.count() возвращает общее количество строк.df.na().drop() удалит строки, содержащие null значения.Если нулевые значения отсутствуют, количество строк будет равно и метод вернет true, иначе false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...