如何在 pydeequ 中运行所有建议的检查

问题描述

我刚刚开始使用 pydeequ,我想为具有约 1800 个特征的 spark 数据框创建检查。现在要知道我必须执行哪些检查,我执行以下操作

suggestionResult = ConstraintSuggestionRunner(spark) \
             .onData(df) \
             .addConstraintRule(DEFAULT()) \
             .run()

根据上述内容,我得到了对我可以对我的数据进行的所有检查的建议。现在目标是 2 倍。

  1. 我可能想运行 suggestionResult 提供的检查
  2. 我可能想运行一个特定的检查,例如非负、唯一检查一系列功能

我完全不确定该怎么做,在尝试了多种方法后,它仍然不起作用,虽然我知道它当然可以一次运行所有建议检查,但只能在 Scala 中查看 this(我需要做根据我的观点,这是在 pydeequ 中的 1)

我确实尝试过以下方式,但没有奏效。在重复分析器上给了我一个错误

check_list = [check.isNonNegative,check.isPositive]
checkResultBuilder = VerificationSuite(spark).onData(df)
for col in sub_cols:
    checkResultBuilder = reduce(
    lambda vbuilder,checker: vbuilder.addCheck(checker(col)),check_list,checkResultBuilder)

checkResultBuilder.run()

解决方法

您可以使用此处列出的方法 https://github.com/awslabs/python-deequ/issues/23,然后将参数作为名为 args 的列表传递,并将其解压为 *args。

Constraint Suggestion Runner 返回一个字典,其约束包含在 constraint_suggestions 键中,您可以通过进一步阅读字典内部的一些工作来进一步解压缩。

使用 eval(str) 将额外参数的字符串形式转换为适当的对象,并使用 get(attr) 添加给定名称的约束。

for item in parameters:
   args.append(eval(str(item)))

check.addConstraint(getattr(check,constraint)(*args))