Как я могу сохранить предложения Deequ Contraint в файл для повторного использования?

Здравствуйте, я использую Amazon Deequ для создания набора ограничений для проверки качества моих данных. Я хочу сохранить объект предложения ограничения в HDS, чтобы я мог загрузить его и использовать для проверки в любое время, когда я хочу запустить проверку качества данных. Как я могу сохранить этот объект и перезагрузить его при необходимости. это код, который я использую для генерации

val rules = Seq(
  CompleteIfCompleteRule(),
  RetainCompletenessRule(),
  RetainTypeRule(),
  CategoricalRangeRule(),
  FractionalCategoricalRangeRule(),
  NonNegativeNumbersRule(),
  UniqueIfApproximatelyUniqueRule()
)

// Analyse dataset and return suggestions
val suggestionResult = ConstraintSuggestionRunner()
  .onData(data)
  .addConstraintRules(rules)
  .run()

// display(suggestionResult)
val constraints = {
  suggestionResult.constraintSuggestions.flatMap {
    case (_, suggestions) => suggestions.map { _.constraint }
  }.toSeq
}

Я хочу сохранить ограничения или результат предложения


person martinl    schedule 28.04.2020    source источник


Ответы (1)


Было бы полезно получить более подробную информацию о сценарии использования, который вы имеете в виду. Как правило, сохранение результатов предложения ограничений и их автоматическое применение к новым наборам данных не является рекомендуемым подходом (если не анти-шаблоном).

Результаты предложений по ограничениям дают вам хорошую отправную точку для выражения ваших ожиданий в отношении данных на основе результатов профилирования. Однако они должны быть проверены человеком, прежде чем применять их к новым данным. После подтверждения вы можете легко сгенерировать необходимый код проверки с помощью вызова .codeForConstraint по индивидуальному предложению ограничения. Это позволяет довольно легко собрать необходимый код проверки и включить его в базу кода.

Сохранение и повторное использование предложений ограничений без промежуточного человеческого аудита больше похоже на вариант использования обнаружения аномалий, когда вы стремитесь гарантировать, что новые пакеты набора данных демонстрируют свойства, аналогичные исходному набору входных данных, который вы использовали в качестве эталона для предложения ограничения. Этот вариант использования более подробно обсуждается в документация Deequ.

Принимая во внимание эти моменты, если вам действительно нужно написать и перечитать предложения по ограничениям, вам нужно будет сделать черты ConstraintAnalyzer) сериализуемыми (путем расширения Serializable). Это разблокирует вас, но вам нужно будет поднять вопрос/отправить PR в репозиторий Github. Если это будет принято, вы сможете сериализовать предложения ограничений следующим образом, используя подход к сериализации из другого ответа StackOverflow :

val constraints = suggestionResult.constraintSuggestions
    .flatMap {
        case (_, suggestions) => suggestions.map(_.constraint)
    }

val serializedConstraints: Array[Byte]  = serialise(constraints)
val deserializedConstrinats: Iterable[Constraint] = deserialise(serializedConstraints)
    .asInstanceOf[Iterable[Constraint]]

person steps    schedule 09.05.2020