Составной фильтр Pyspark, несколько условий - PullRequest
0 голосов
/ 29 января 2019

Совершенно новый для Pyspark, и я реорганизую некоторый код R, который начинает терять свою способность к правильному масштабированию.Я возвращаю фрейм данных с несколькими столбцами с числовыми значениями и пытаюсь отфильтровать этот набор результатов в новый, меньший набор результатов, используя несколько составных условий.

from pyspark.sql import functions as f

matches = df.filter(f.when('df.business') >=0.9 & (f.when('df.city') == 1.0) & (f.when('street') >= 0.7)) |
                   (f.when('df.phone') == 1) & (f.when('df.firstname') == 1) & (f.when('df.street') == 1) & (f.when('df.city' == 1)) |
                   (f.when('df.business') >=0.9) & (f.when('df.street') >=0.9) & (f.when('df.city')) == 1))) |
                   (f.when('df.phone') == 1) & (f.when('df.street') == 1) & (f.when('df.city')) == 1))) |
                   (f.when('df.lastname') >=0.9) & (f.when('df.phone') == 1) & (f.when('df.business')) >=0.9 & (f.when('df.city') == 1))) |
                   (f.when('df.phone') == 1 & (f.when('df.street') == 1 & (f.when('df.city') == 1) & (f.when('df.busname') >= 0.6)))

По сути, я просто пытаюсь вернуть новый фрейм данных, "совпадающий", когда столбцы в предыдущем фрейме данных, "sdf", попадают в вышеуказанный критерий.Я прочитал несколько других сообщений о фильтрации, таких как

несколько условий для фильтрации в кадрах искровых данных

PySpark: несколько условий в условии когда

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

1 Ответ

0 голосов
/ 29 января 2019

Ну, так как @DataDog прояснил это, поэтому код ниже копирует фильтры, установленные OP.

Примечание: Каждый пункт / подпункт должен быть внутри скобок.Если я пропустил, то это непреднамеренная ошибка, так как у меня не было данных для проверки.Но идея остается прежней.

matches = df.filter(
                ((df.business >= 0.9) & (df.city ==1) & (df.street >= 0.7))
                                    |
                ((df.phone == 1) & (df.firstname == 1) & (df.street ==1) & (df.city ==1))
                                    |
                ((df.business >= 0.9) & (df.street >= 0.9) & (df.city ==1))
                                    |
                ((df.phone == 1) & (df.street == 1) & (df.city ==1))
                                    |
                ((df.lastname >= 0.9) & (df.phone == 1) & (df.business >=0.9) & (df.city ==1))
                                    |
                ((df.phone == 1) & (df.street == 1) & (df.city ==1) & (df.busname >=0.6))
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...