Фильтрация записей в фрейме данных pyspark, если массив структуры содержит запись

#dataframe #pyspark #filter

Вопрос:

Мой фрейм данных Pyspark выглядит следующим образом:

 |-- name: string (nullable = true)  |-- other_attr: array (nullable = true)  | |-- element: struct (containsNull = true)  | | |-- key: string (nullable = true)  | | |-- value: string (nullable = true)  

Я ищу строки, у которых нет [Закрыто, да] в их массиве структуры в разделе other_attr. other_attr-это массив структуры, который может быть пустым массивом. Как я мог запустить эту фильтрацию?

Ответ №1:

Вы можете использовать функцию to_json с содержимым для фильтрации строк на основе критериев.

 import pyspark.sql.functions as F  df2 = df.filter(  ~F.to_json('other_attr').contains(  F.to_json(  F.struct(  F.lit('Closed').alias('key'),  F.lit('Yes').alias('value')  )  )  ) )  

Ответ №2:

Вы можете просто использовать array_contains для проверки структуры [Closed, Yes] следующим образом

 import pyspark.sql.functions as F  df.show() #  ----- ---------------  # | name| other_attr| #  ----- ---------------  # |test1|[{Closed, Yes}]| # |test2| [{Closed, No}]| # |test3| []| #  ----- ---------------   (df.where(~F  .array_contains('other_attr', F.struct(  F.lit('Closed').alias('key'),  F.lit('Yes').alias('value'),  ))  ).show() )  # Output #  ----- --------------  # | name| other_attr| #  ----- --------------  # |test2|[{Closed, No}]| # |test3| []| #  ----- --------------   

Комментарии:

1. Ошибка типа: объект «Столбец» не может быть вызван, я получаю эту ошибку!

2. Как выглядит ваш код? Я протестировал перед публикацией в качестве ответа, отсюда и вывод, приведенный выше. (Кроме того, ИМО, не следует ли вам обсудить ошибку, прежде чем отказывать кому-то, кто тратит свое время на ответы на ваши вопросы?)

3. Извините за пониженный голос! Я по ошибке проголосовал и хотел отменить голосование, и это произошло. Пожалуйста, отредактируйте код, чтобы я мог проголосовать за вас.