如何解决Azure Databricks Pyspark 规则引擎集成
有两个数据帧,一个有实际数据,另一个有要检查的规则。
显示(DF1) - 主数据表:
显示(DF2) - 规则表:
以上数据说明:
DF1:有 30 多列数据,我需要在 DF2 中检查 10 多列的条件
DF2:有 10 多个带有规则的列(大约 20 个,即这些规则可能一年更改一次)
我不想要的:
- 使用 Drools 等规则引擎在 Python 中进行冗长而复杂的编码
- 复杂且永无止境 - 结束 If else 语句/ When().Otherwise()
我尝试过的: 1.业务规则引擎 (PyPi) - Link
from business_rule_engine import RuleParser
params = {
'Col_2': DF1.where(DF1.SNO == 1).select('Col_2')
}
rules = """
rule "1"
when
Col_2= "B"
then
print("Yayyyy")
end
"""
parser = RuleParser()
parser.register_function(print)
parser.parsestr(rules)
parser.execute(params)
如果我通过 DF,则无论怎样,上面的总是返回 FALSE。如果我通过手动记录像 参数 = { 'Col_2': 'B' }
它将返回 TRUE。
需要关于如何传递多列 DF 行的帮助
2 规则引擎 (PyPi) - Link:
import rule_engine
rule = rule_engine.Rule(
'Col_2 == "B" and (Col_3 != 1 or Col_3 != 2)'
)
rule.matches({
DF1.where(DF1.SNO == 1)
})
当通过 DF 给定一行时,上面的总是返回 FALSE,当给定 Manual 时,它会返回 TRUE。甚至尝试了 Rule.filter({ DF1 }) 它给了我
非常感谢任何帮助。提前致谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。