www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Spark Joy - говоря Konmari в журналах событий с грамматикой манипулирования данными

Дата публикации Feb 20, 2019

Когда у вас есть тонна журналов событий для анализа, что нужно делатьоружиевыбора будет? В этой статье я поделюсь своим опытом использования spark / sparklyr для решения этой проблемы.

Журналы событий, собирающие пользовательские данные наHonestbee🐝 хранятся в AWS S3 как часть Datalake, доставленной нам изсегментс интервалом в 40 минут. Важно научиться извлекать такие данные, и команда Data (Science) использует эти журналы для оценки производительности наших моделей машинного обученияканоническийА Б тестирование.

Кроме того, мы также используем те же журналы для отслеживания бизнес-показателей, какСоблизываниеThroughрели,СКонверсиярел иGMV

В этой статье я расскажу о том, как мы используем кластеры с высокой памятью, на которых работает Spark, для анализа таких журналов, созданных системой Food Recommender System.

Пример из практики: Система пищевых рекомендаций

Всякий раз, когда клиент Honestbee переходит к оформлению заказа, наши модели ML будут стараться изо всех сил делать индивидуальный прогноз, какие товары вы, скорее всего, добавите в корзину, особенно те, которые вы пропустили.

после смерти, потребует от нас просмотра журналов, чтобы увидеть, к какой группе лечения, на основе взвешенного распределения, был назначен пользователь.

Теперь давайте погружаться.

Сначала мы импортируем необходимые библиотеки:

Соединение с искровым кластером с высокой памятью

Далее нам нужно подключиться к Spark, главному узлу. Я рекомендую поиграть с локальным компьютером, прежде чем переходить к локальному кластеру и, наконец, к удаленному.

Установка Spark

Если он еще не был установлен, к счастьюsparklyrпоставляется со встроенной функцией, чтобы помочь с установкой

spark_install(
version = "2.4.0",
hadoop_version = "2.7"
)

Обратите внимание, что здесь мы также устанавливаем Hadoop вместе с spark, поскольку в него входит jar, необходимый для чтения файлов из файловой системы S3.

Локальный кластер / один узел

Далее вы подключитесь к искровому кластеру, т.е. созданиеSпаркСonnection, часто сокращенно SC, будет тем, чем вы хотите заниматься.

Если вы подключаетесь к локально установленному спарк-кластеру / одноузловому блоку, вы установите основной параметр какlocal,

Возможно, вам придется поэкспериментировать с потреблением памяти здесь, я установил его на 150 Гб, ваша мили может варьироваться в зависимости от того, какую коробку вы получили.

Запуск Spark на ноутбуке или установка с одним узлом на более крупный облачный экземпляр - это нормально. Команда DataScience, мы не владеем и не управляем кластером, вместо этого мы запускаем spark на одном узле.действительно большойEC2 экземпляр в основном для прототипирования и EDA. Однако, когда работа становится слишком большой, вы, вероятно, захотите рассмотреть что-то более тяжелое, например, правильный кластер.

Удаленные кластеры

Возможность подключения к удаленному точечному кластеру может быть привлекательной, если вы используете сервер jupyterhub / Rstudio, особенно если вы хотите, чтобы для каждого ученого данных был выделен один кластер.

В таких случаях процесс python / R не выполняется на том же главном узле кластера. Сторонние поставщики услуг Spark as a Service, такие как Qubole и Databricks, могут существенно облегчить эту задачу. В Honestbee мы также решили использовать эту опцию, и кластеры предоставляютсяQuboleпод нашим аккаунтом AWS.

PS. Qubole - это довольно хорошая кража!

Суть выше устанавливает искровое соединениеscвам нужно будет использовать этот объект в большинстве функций.

Отдельно, поскольку мы читаем с S3, нам нужно установить ключи доступа S3 и секрет. Это должно быть установлено до выполнения таких функций, какspark_read_json

Таким образом, вы спросите, каковы плюсы и минусы каждого. Локальные кластеры, как правило, хороши для EDA, так как вы будете общаться через REST API (LIVY).

Чтение журналов JSON

Существуют два способа чтения логов. Во-первых, их нужно читать как целые куски или как поток - когда они попадают в ваше ведро.

Есть две функции,spark_read_jsonа такжеstream_read_jsonпервый пакетируется, а второй создает структурированный поток данных. Существует также эквивалент для чтения ваших файлов Parquet

Пакетный

Путь должен быть установлен сs3aпротокол.s3a://segment_bucket/segment-logs/<source_id>/1550361600000.

json_input = spark_read_json(
sc = sc,
name= "logs",
path= s3,
overwrite=TRUE
)

Вот где начинается магия:

Как вы можете видеть, этопростозапрос ...

  1. Фильтр для всехAdded to Cartсобытия изFoodвертикальный
  2. Выберите следующие столбцы:
  • CartID
  • experiment_id
  • variant(treatment_group) и
  • timestamp

3. Удалите события, когда пользователи не были назначены для модели

4. Добавьте новые столбцы: 1.fulltimeудобочитаемое время, 2.timeчас дня

5. Сгруппируйте логи по сервисамrecommenderи посчитать количество строк

6. Добавить новый столбецeventсо значениемAdded to Cart

7. Сортировать по времени

Вот график вывода, поэтому мы видим, что Модель 2 действительно получает больше кликов, чем Модель 1.

Spark Streams

В качестве альтернативы, вы могли бы также записать результаты вышеупомянутых манипуляций в структурированный искровой поток

Вы можете просмотреть эти результаты из потока, используяtblфункция связана сglimpse,

sc %>% 
tbl("data_stream") %>%
glimpse

И это все, ребята!


Кроме того, я хотел бы прокомментировать существующие опции для хранения метаданных модели, особенно когда вы проводите A | B-тестирование с несколькими моделями, каждая с несколькими версиями.

Трудно отследить, что происходит, если честно.

В качестве кандидата наук я лично работал над использованием баз данных Graph для хранения данных со сложными взаимосвязями, и в настоящее время мы работаем над созданием такой системы для хранения метаданных, связанных с нашими моделями.

Например:

  1. С какими API они связаны
  2. Какой поток воздуха /Арговакансии связаны с этими моделями
  3. Где находятся конфигурации развертывания (helm-charts и terraform) и другие метаданные развертываний
  4. И, конечно, метаданные, такие как производительность и оценки.

Приходите поговорить с нами, мы нанимаем!Инженер данных,Старший научный сотрудник

Первоначально опубликовано наetheleon.github.io20 февраля 2019 г.

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map