Проверьте, содержит ли столбец пропущенные значения

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

  1. Dataset<Row> ds имеет столбцы col1 и col2. Он может содержать и другие столбцы.
  2. Убедитесь, что в 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 в теле функции.

Может быть, это может помочь (хотя и на питоне): stackoverflow.com/questions/55964196/…

Shaido 06.05.2019 12:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
719
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

Как насчет,

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

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

Другие вопросы по теме