0

您好,我正在使用 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
}

我想保存约束或建议结果

4

1 回答 1

0

获得有关您所考虑的用例的更多详细信息是值得的。通常,保留约束建议结果并将其自动应用于新数据集不是可取的方法(如果不是反模式)。

约束建议结果为您提供了一个很好的起点,可以根据分析结果表达您对数据的期望。但是,在对新数据强制执行之前,它们应该经过人工验证。.codeForConstraint确认后,您可以通过调用单个约束建议轻松生成必要的验证代码。这使得组装必要的验证代码并将其包含在您的代码库中变得相当容易。

在没有中间人工审核的情况下保留和重用约束建议听起来更像是一个异常检测用例,您的目标是确保数据集的新批次表现出与您用作约束建议参考的原始输入数据集相似的属性。这个用例在Deequ 文档中有更详细的讨论。

提到这些点,如果你真的需要编写和重新阅读约束建议,你需要使特征Constraint(和Analyzer)可序列化(通过让它们扩展Serializable)。这将解除对您的阻止,但您需要在Github 存储库中提出问题/提交 PR 。如果这被接受,您将能够使用来自另一个 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]]

于 2020-05-09T12:40:25.520 回答