Как передать список массивов (несколько столбцов) вместо одного столбца в pyspark с помощью этой команды:

new_df = new_df.filter(new_df.color.isin(*filter_list) == False)

например: -

Я использовал этот код для удаления значения мусора (#, $) в один столбец

filter_list = ['##', '$']

new_df = new_df.filter(new_df.color.isin(*filter_list) == False)

В этом примере «цвет» - это столбец.

Но я хочу удалить значение мусора (#, ##, $, $$$) с несколькими вхождениями в несколько столбцов.

Пример ввода: -

id       name       Salary

#        Yogita     3000

2        Bhavana    5000

$$       ###        7000

%$4#     Neha       $$$$

Пример вывода: -

 id         name       salary

 2        Bhavana      5000

Кто-нибудь, помогите мне,

Заранее спасибо,

Йогита

0
Yogita Aher 27 Ноя 2017 в 16:21

1 ответ

Лучший ответ

Вот ответ с использованием пользовательской функции:

from pyspark.sql.types import *
from itertools import chain

filter_list = ['#','##', '$', '$$$']
def filterfn(*x):
    booleans=list(chain(*[[filter not in elt for filter in filter_list] for elt in x]))
    return(reduce(lambda x,y: x and y, booleans, True))

filter_udf=f.udf(filterfn, BooleanType())
new_df.filter(filter_udf(*[col for col in new_df.columns])).show(10)
1
ags29 27 Ноя 2017 в 17:21