scala - 构建一个函数来向 amazon deequ 框架添加检查
问题描述
使用 amazon deequ 库,我正在尝试构建一个函数,该函数需要 3 个参数、检查对象、一个告诉需要运行什么约束的字符串以及另一个提供约束条件的字符串。我有一堆要从 mysql 表中读取的检查。我的意图是遍历我从 mysql 表中获得的所有检查,并使用我上面描述的函数构建一个检查对象并在源数据帧上运行检查这里是亚马逊 deequ 的示例 https://towardsdatascience.com/使用 apache-spark-93bb1e2c5cd0 进行大规模自动化数据质量测试
所以函数调用看起来像这样,
var _check = build_check_object_function(check_object, "hasSize", "10000")
这个函数应该向 check_object 添加一个新的 hasSize 检查并返回它。
我卡住的部分是如何将 hasSize 字符串转换为 hasSize 函数。
var _check = Check(CheckLevel.Error, "Data Validation Check")
val listOfFunctions= _check.getClass.getMethods.filter(!_.getName().contains('$'))
for (function <- listOfFunctions) {
if( function.getName().toLowerCase().contains(row(2).asInstanceOf[String].toLowerCase())) {
_check = _check.function(row(3))
}else{
println("Not a match")}
}
这是我得到的错误
<console>:38: error: value function is not a member of com.amazon.deequ.checks.Check
if( function.getName().toLowerCase().contains(row(2).asInstanceOf[String].toLowerCase())) {_check = _check.function(row(3))
解决方案
您可以使用运行时反射,也可以在数据库和 deequ 声明之间构建一个精简的翻译层。
我建议您将数据库约束/检查字符串显式转换为 deequ 声明,例如:
if (constraint == "hasSize") {
// as Constraint
Constraint.sizeConstraint(_ <= 10)
// as Check
Check(CheckLevel.Error, "name").hasSize(_ <= 10)
}
推荐阅读
- python-3.x - 如何从子类之一返回基类中抽象方法定义的结果
- python - Scipy 未安装在 Pycharm 上
- python - 如何要求一个字符串,然后要求一个字符串的位置,然后删除字母并打印没有字母的单词
- javascript - Object.Create 带有原型的调用函数
- android - 不同的android权限名称前缀有什么区别?
- java - 为 IntelliJ Idea 选择必要的 JDK
- javascript - 我正在尝试为我的登录按钮控件获取功能,一旦填写了字段,就允许登录
- python - 通过绑定方法使用 tkinter 条目更新字典值
- google-kubernetes-engine - cloudsql_proxy 的 GKE 网络策略
- javascript - cypress - “运行所有”功能破坏了我的测试