Как динамически отфильтровать строки в кадре данных Spark с точным соответствием? - PullRequest
1 голос
/ 27 сентября 2019

У меня есть словарь, подобный этому

dict = {
"ColA": "A",
"ColB": "B"
}

Я хочу использовать этот словарь для удаления строки в кадре данных, df, только если строка точно соответствует каждому значению в словаре.

Таким образом, используя входной фрейм данных

+------+------+
| ColA | ColB |
+------+------+
| A    | A    |
| A    | B    |
| B    | B    |
+------+------+

Вывод будет

+------+------+
| ColA | ColB |
+------+------+
| A    | A    |
| B    | B    |
+------+------+

Я пробовал что-то подобное

 for col in dict:
    df = df.filter(df_to_upsert[col] != row[col])

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

1 Ответ

3 голосов
/ 27 сентября 2019

Типичный случай с использованием функции уменьшения:

from pyspark.sql.functions import col
from functools import reduce

cond = reduce(lambda x,y: x|y, [ col(k)!=v for k,v in dict.items() ])

df.filter(cond).show()
+----+----+
|ColA|ColB|
+----+----+
|   A|   A|
|   B|   B|
+----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...