Почему функция фильтра Pyspark не работает?

#pyspark

Вопрос:

Я пытаюсь отфильтровать набор данных по статусу заказа. Это мой код:

  df1=all_in_all_df.groupBy("productName") 
 .agg(F.max('orderItemSubTotal')) 
 .filter(col("orderStatus") == "CLOSED") 
 .show()
 

Но когда я запускаю код, я получаю следующую ошибку:

Исключение AnalysisException: не удается разрешить ‘Статус заказа’ для заданных входных столбцов: [max(orderItemSubTotal), имя продукта]; ‘Фильтр (‘Статус заказа = ЗАКРЫТ)

Удаление .filter() помогает отобразить результат, но мне нужно отфильтровать данные.

Ответ №1:

Агрегация ограничивает количество результирующих столбцов теми, которые используются для группировки (в group by предложении), и результатом агрегации.
Таким образом, больше нет orderStatus колонки.

Если вы хотите иметь возможность фильтровать по нему, сделайте это до агрегирования (но для агрегирования будут учитываться только отфильтрованные строки) или интегрируйте их в предложение group by (опять же, агрегирование будет производиться по статусу, а не глобально, но в этом втором случае у вас будут доступны все статусы со связанными агрегациями).