Генератор динамических условий в писпарке - PullRequest
0 голосов
/ 27 октября 2019

Я разработал модули в соответствии с требованиями бизнеса. Теперь мне нужен динамический генератор условий или генератор запросов. Так, например, рассмотрим следующий случай:

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

У меня много разных бизнес-логик, как указано выше. Итак, в этом случае я определил общий шаблон, такой как "select *", и создал файл свойств с расширением .properties, и я прочитал эту переменную в файле .py:

Key-Value в свойствахfile:

selectVar = "Select * from "   

Но теперь то, что требуется для создания способа или интерфейса, где пользователь может изменять условия в соответствии со своими потребностями. Как они могут добавить несколько условий или удалить условие. В приведенном выше примере они могут удалить CONDITIONS2 или добавить CONDITIONS4, или они могут изменить CONDITIONS3 в соответствии с их потребностями. Это должно быть динамичным. Нет, часть кода должна быть обязательной на стороне клиента. Они просто хотят передать условия, и он должен быть подставлен в запрос, и он должен выполняться соответствующим образом. Итак, как я могу сделать это в pyspark. Я попытался найти доступные инструменты в этом случае, но не повезло. Может ли кто-нибудь помочь мне с подходом?

1 Ответ

0 голосов
/ 28 октября 2019

Нетривиально написать общий интерфейс, который анализирует каждый тип выражения. Однако для конкретного случая нескольких выражений фильтра вы можете сделать что-то вроде этого:

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")  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...