PySpark: динамический фильтр - PullRequest
       4

PySpark: динамический фильтр

0 голосов
/ 13 сентября 2018

В настоящее время я пытаюсь реализовать динамический фильтр.Проблема в том, что у меня есть динамический список столбцов - и я генерирую новые столбцы, которые содержат либо ИСТИНА, либо ЛОЖЬ.В этих новых столбцах я хочу выбрать

  1. Все записи, где все столбцы ИСТИНА
  2. Все записи, где один столбец ЛОЖЬ (и преобразовать его)

Чтобы привести пример, здесь входной набор данных (вместе со столбцами TRUE / FALSE):

sc = SparkContext.getOrCreate()

df = sc.parallelize([('a','a1',True,'aa','aa1',True),
                      ('b','b1',False,'bb','bb1',True),
                      ('c','c1',False,'cc','cc1',False)]).toDF(
                    ["a_1","a_1_new","a_1_suc","b_1","b_1_new","b_1_suc"])  

Идея состоит в том, что в конечном наборе данных всегда есть столбцы, сгруппированные в 3 - один _1, один _1_new и один _1_suc.

Теперь конечный результат должен быть одним кадром данных, как

a_1    a_1_new     a_1_suc     b_1     b_1_new     b_1_suc
a      a1          True        aa      aa1         True

Это я уже начал работать - просто явно с

df.filter(((F.col("a_1_suc") == 'True') & (F.col("b_1_suc")` == 'True')))

Однако это происходит не динамически - возможно, существует также столбец c / d / e, для которого затем должны быть истинными значения c_1_suc / d_1_suc и e_1_suc.Возможно ли это?

Аналогично, случай для a_1_suc = 'False' - однако здесь я хочу разделить строки:

Name_1       Name_1_new       Name_1_suc
b            b1               False
c            c1               False
cc           cc1              False

Здесь 2 точки отсутствуют: Первая фильтрациястроки явно как в примере выше, только с |вместо & - это также возможно динамически?

И во-вторых, как я могу разделить строки (при необходимости), учитывая, что в кадре данных может быть несколько столбцов.

Спасибои всего наилучшего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...