问题描述
我刚刚开始使用 pydeequ,我想为具有约 1800 个特征的 spark 数据框创建检查。现在要知道我必须执行哪些检查,我执行以下操作
suggestionResult = ConstraintSuggestionRunner(spark) \
.onData(df) \
.addConstraintRule(DEFAULT()) \
.run()
根据上述内容,我得到了对我可以对我的数据进行的所有检查的建议。现在目标是 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))