#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. Извините за пониженный голос! Я по ошибке проголосовал и хотел отменить голосование, и это произошло. Пожалуйста, отредактируйте код, чтобы я мог проголосовать за вас.