динамический фильтр данных pyspark - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу динамически фильтровать нулевые значения во входном кадре данных, поскольку столбцы значений могут быть из значения (1) ... значение (n)

Входной кадр данных:

|dim1|dim2|TR_LIST|value1|value2|
| 101| 201|MTD0001|     1|    21|
| 101| 201|MTD0001|  null|  null|
| 101| 201|MTD0001|  null|  null|
| 102| 202|MTD0002|  null|  null|
| 102| 202|MTD0002|     2|    22|
| 102| 202|MTD0002|  null|  null|
| 103| 203|MTD0003|  null|  null|
| 103| 203|MTD0003|  null|  null|
| 103| 203|MTD0003|     3|    23|

Выходной фрейм данных:

|dim1|dim2|TR_LIST|value1|value2|
| 101| 201|MTD0001|     1|    21|
| 102| 202|MTD0002|     2|    22|
| 103| 203|MTD0003|     3|    23|

Я попытался выполнить фильтрацию, используя метод for l oop в методе фильтра dataframe, но получил ошибку, как (это должно быть либо str, либо columm), из командной строки попытался:

list_valiue = [value1, value2]  #Here i will be passing value columns as a list
df.filter(df.value.isNotNull() for value in list_value)  #Throwing an error

также пробовал другим способом:

df.where(" AND ".join([df.%s.isNotNull())"%(li) for li in list_value])).show()  # Even I'm getting error here

Пожалуйста, укажите все, что я выполнил в вышеуказанных запросах ??

1 Ответ

0 голосов
/ 18 апреля 2020

Я не понимаю, что вы подразумеваете под динамически в этом примере, но null можно удалить, используя .isNull (что, кажется, вы знаете) или dropna.

Второй подход кажется более подходит, когда есть несколько столбцов для проверки

df = df.dropna(subset= ["value1", "value2"])

Метод по умолчанию - any, но вы также можете использовать all. См. do c

В целом, вы можете указать столько столбцов, сколько необходимо, благодаря аргументу subset.

Пожалуйста, дайте мне знать, если я неправильно вас понял проблема

...