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

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

val rules = Seq (CompleteIfCompleteRule (), RetainCompletenessRule (), RetainTypeRule (), CategoryoricalRangeRule (), FractionalCategoricalRangeRule (), NonNegiteRule ()) 1003 *

// Анализировать набор данных и возвращать предложения. .flatMap {case (_, Suggestions) => ideas.map {_.constraint}} .toSeq} *

Я хочу сохранить ограничения или offertionResult

1 Ответ

0 голосов
/ 09 мая 2020

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

Результаты предложения с ограничениями дают вам хорошую отправную точку для express ваших ожиданий относительно данные, основанные на результатах профилирования. Тем не менее, они должны быть проверены человеком, прежде чем применять их на новых данных. После подтверждения вы можете легко сгенерировать необходимый код проверки с помощью вызова .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]]

...