построение функции для добавления проверок в рамку amazon deequ - PullRequest
0 голосов
/ 17 марта 2020

Используя библиотеку amazon deequ, я пытаюсь построить функцию, которая принимает 3 параметра, объект проверки, строку, сообщающую, какое ограничение необходимо выполнить, и другую строку, которая предоставляет критерии ограничения. У меня есть куча проверок, которые я хочу прочитать из таблицы mysql. Мое намерение состоит в том, чтобы пройти через все проверки, которые я получаю из таблицы mysql, и построить объект проверки, используя функцию, которую я описал выше, и выполнить проверки на исходном фрейме данных. Вот пример amazon deequ https://towardsdatascience.com/automated-data-quality-testing-at-scale-using-apache-spark-93bb1e2c5cd0

Таким образом, вызов функции выглядит примерно так:

var _check = build_check_object_function(check_object, "hasSize", "10000")

Эта функция должна добавить новую проверку hasSize в check_object и вернуть ее.

Часть, в которой я застрял, - это как перевести строку hasSize в функцию hasSize.

    var _check = Check(CheckLevel.Error, "Data Validation Check")
    val listOfFunctions= _check.getClass.getMethods.filter(!_.getName().contains('$'))
    for (function <- listOfFunctions) {
       if( function.getName().toLowerCase().contains(row(2).asInstanceOf[String].toLowerCase())) {
         _check = _check.function(row(3))
        }else{
            println("Not a match")}
        }

Вот ошибка, которую я получаю

<console>:38: error: value function is not a member of com.amazon.deequ.checks.Check
   if( function.getName().toLowerCase().contains(row(2).asInstanceOf[String].toLowerCase())) {_check = _check.function(row(3))                                                          

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете использовать отражение во время выполнения или создать тонкий слой перевода между вашей базой данных и объявлениями deequ.

Я бы предложил вам go с явным переводом ограничений / проверочных строк базы данных в объявления deequ, например:

if (constraint == "hasSize") {
  // as Constraint
  Constraint.sizeConstraint(_ <= 10)
  // as Check
  Check(CheckLevel.Error, "name").hasSize(_ <= 10)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...