【问题标题】:How can i save Deequ Contraint Suggestions to a file for use again?如何将 Deequ Contraint Suggestions 保存到文件中以供再次使用?
【发布时间】:2020-08-12 06:43:06
【问题描述】:

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

我想保存约束或建议结果

【问题讨论】:

    标签: scala apache-spark amazon-deequ


    【解决方案1】:

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

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

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

    提到的这些点,如果你真的需要编写和重新阅读约束建议,你需要使特征Constraint(和Analyzer)可序列化(通过让它们扩展Serializable)。这将解除对您的阻止,但您需要通过Github repository 提出问题/提交 PR。如果这被接受,您将能够使用serialization approach from another StackOverflow answer 如下序列化约束建议:

    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]]
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多