Фильтрация файла паркета при чтении с помощью PySpark

У меня есть огромный набор данных секционированных файлов паркета, хранящихся в AWS s3, и я хочу читать только выборку данных за каждый месяц с помощью AWS EMR. Я должен фильтровать данные за каждый месяц по значению «user_id», выбирая, например, данные от 100 000 пользователей (из миллионов) и записывая агрегации обратно в s3.

Я понял, как читать и записывать в s3 с помощью кластеров EMR, но тестировал на очень маленьком наборе данных. Для реального набора данных мне нужно отфильтровать данные, чтобы иметь возможность их обрабатывать. Как это сделать с помощью pyspark?


person RafaJM    schedule 19.11.2019    source источник
comment
Те 100 000 пользователей, которых вы хотите отфильтровать, хранятся в коллекции, в кадре данных, или вам просто нужны случайные пользователи?   -  person LizardKing    schedule 19.11.2019
comment
У меня они хранятся не как пользователи, а как события, выполняемые пользователями. У меня уже есть написанный сценарий для преобразования этого файла уровня событий в таблицу уровня пользователя, но теперь я столкнулся с проблемой чтения из секционированного файла паркета.   -  person RafaJM    schedule 19.11.2019


Ответы (1)


Spark имеет несколько преобразований выборки. df.sample(...) это то, что вам нужно в вашем случае. См. этот ответ.

Если вам нужно вернуть точное количество результатов, вам нужно (а) немного увеличить выборку, а затем (б) использовать df.limit(), чтобы получить точное число.

Если вы можете работать только с дробью, а не с целевым числом, вы можете сэкономить df.count.

person Sim    schedule 19.11.2019
comment
Спасибо, этого ответа достаточно для того, что я спросил, хотя моя проблема превратилась в более конкретную версию того, что я спросил. Спасибо, в любом случае :) - person RafaJM; 19.11.2019