Прежде всего, важно понять, почему вы получаете эту ошибку.
Способ определения словаря filters_to_apply
, это сопоставление строковых ключей со значениями string . Наличие определенной переменной с именем input_df
не имеет ничего общего с строкой с символами "input_df"
. Для Python это две совершенно разные вещи.
Насколько я знаю, у вас есть две альтернативы:
- Вы можете передать переменную
input_df
(при условии, что это определяется где-то) вокруг и применяет фильтры непосредственно к нему (у вас может быть функция, в которой один из ее аргументов является DataFrame, поэтому он может обрабатывать разные DataFrames). - С определенной переменной
input_df
, вы можете зарегистрировать временное представление и получить тот же самый DataFrame позже.
Мое предложение
Определить функцию, аргументы которой состоят из DataFrame и последовательность правил.
Пример определения функции:
from pyspark.sql import DataFrame
from typing import Iterable
def my_filter(df: DataFrame, conditions: Iterable[str]) -> DataFrame:
return df.filter(" and ".join(conditions))
Пример использования:
df = sparksession.createDataFrame(
[(1, True, "Active"), (2, False, "Active"), (3, True, "Disabled")],
["id", "bool", "status"]
)
df.show()
my_filter(df, ["not bool", "status = 'Active'"]).show()
Результаты:
+---+-----+--------+
| id| bool| status|
+---+-----+--------+
| 1| true| Active|
| 2|false| Active|
| 3| true|Disabled|
+---+-----+--------+
+---+-----+------+
| id| bool|status|
+---+-----+------+
| 2|false|Active|
+---+-----+------+