В настоящее время я пытаюсь реализовать динамический фильтр.Проблема в том, что у меня есть динамический список столбцов - и я генерирую новые столбцы, которые содержат либо ИСТИНА, либо ЛОЖЬ.В этих новых столбцах я хочу выбрать
- Все записи, где все столбцы ИСТИНА
- Все записи, где один столбец ЛОЖЬ (и преобразовать его)
Чтобы привести пример, здесь входной набор данных (вместе со столбцами 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 точки отсутствуют: Первая фильтрациястроки явно как в примере выше, только с |вместо & - это также возможно динамически?
И во-вторых, как я могу разделить строки (при необходимости), учитывая, что в кадре данных может быть несколько столбцов.
Спасибои всего наилучшего.