Мы с вами уже исследовали данные, которые у нас есть.
Теперь нам необходимо будет обработать наши данные и подготовить их к обучению моделей.
Для этого выделим ключевые параметры и определим целевую фичу (CTR
).
При этом наши данные могут впоследствии изменяться, накапливаться и достигать больших объемов, поэтому нам необходимо реализовать задачу обработки данных, которую мы при необходимости сможем многократно выполнять для получения результата над любым объемом данных.
Структура данных:
date
- день, в который происходят событияtime
- точное время событияevent
- тип события, может быть или показ или клик по рекламеplatform
- платформа, на которой произошло рекламное событиеad_id
- id рекламного объявленияclient_union_id
- id рекламного клиентаcampaign_union_id
- id рекламной кампанииad_cost_type
- тип объявления с оплатой за клики (CPC) или за показы (CPM)ad_cost
- стоимость объявления в рублях, для CPC объявлений - это цена за клик, для CPM - цена за 1000 показовhas_video
- есть ли у рекламного объявления видеоtarget_audience_count
- размер аудитории, на которую таргетируется объявление
Представьте, что все ваши инженеры по данным заболели, но и один в поле воин!
У вас есть отличный шанс удивить их! Вам необходимо реализовать на PySpark
задачу обработки данных для их подготовки к обучению моделей.
В результате выполнения вашей задачи, например, выполнив команду:
spark-submit PySparkJob.py clickstream.parquet result
или
python PySparkJob.py clickstream.parquet result
Вы должны прочитать указанный в параметрах файл, обработать его и получить структуру папок вида:
- /result/train
- /result/test
- /result/validate
С наборами данных в следующем соотношении train/test/validate = 0.5/0.25/0.25 (randomSplit)
.
В каждой папке должен находиться parquet
-файл (число партиций не принципиально) со следующей структурой данных:
ad_id
[integer] - id рекламного объявленияtarget_audience_count
[decimal] - размер аудитории, на которую таргетируется объявлениеhas_video
[integer] - 1 если есть видео, иначе 0is_cpm
[integer] - 1 если тип объявления CPM, иначе 0is_cpc
[integer] - 1 если тип объявления CPC, иначе 0ad_cost
[double] - стоимость объявления в рубляхday_count
[integer] - Число дней, которое показывалась рекламаCTR
[double] - Отношение числа кликов к числу просмотров
Пожалуйста, используйте шаблон PySparkJob.py
Формат решения: PySparkJob.py
файл с реализованным кодом.
Все отлично, очень хорошая работа и без усложнений. Вам удалось полностью избежать тяжелых join операций.