pysp中的动态条件发生器

2024-04-18 08:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经根据业务需求开发了模块。现在,我需要的是一个动态条件生成器或查询生成器。例如,考虑以下情况:

B1 = spark.sql("select * from xyz where ABC <> DEF and CONDITIONS1 or CONDITIONS2 or CONDITIONS3")  

我有许多不同的业务逻辑如上所述。因此,在本例中,我确定了一个像"select *"这样的公共模式,创建了一个扩展名为.properties的属性文件,并读取了.py文件中的变量:

属性文件中的Key-Value对:

selectVar = "Select * from "   

但是,现在需要什么样的需求来创建一种用户可以根据需要修改条件的方式或界面呢。就像他们可以添加多个条件或删除一个条件。在上面的示例中,他们可以删除CONDITIONS2或添加CONDITIONS4,也可以根据需要更改CONDITIONS3。它应该是动态的。不,客户端需要编码部分。它们只想传递条件,应该在查询中替换它,并相应地执行。那么,我怎样才能在Pypark里做到呢。我试着在这种情况下寻找可用的工具,但没有运气。有人能帮我接近吗?你知道吗


Tags: 模块or文件fromsql属性情况动态
1条回答
网友
1楼 · 发布于 2024-04-18 08:39:04

编写一个通用接口来解析每种类型的表达式是非常重要的。但是,对于多个过滤器表达式的特定情况,可以执行以下操作:

def customExprEval(df: DataFrame, expr: String*): DataFrame = {
    expr.foldLeft(df){(d, i) => d.where(i)}
}

现在可以使用可变数量的条件表达式调用此函数:

val B1 = spark.sql("select * from xyz")
val B2 = customExprEval(B1,  "ABC <> DEF", "CONDITIONS1 or CONDITIONS2 or CONDITIONS3")  
val B3 = customExprEval(B1, "ABC <> DEF")  

相关问题 更多 >