Skip to content

Проект № 5 для курса "Инженер данных".

Notifications You must be signed in to change notification settings

data-engineer-course/cartax

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Служба такси

Cartax

Описание проекта с требованиями

Есть таблица, состоящая из поездок такси в Нью-Йорке.

Таблица

Необходимо, используя таблицу поездок для каждого дня рассчитать процент поездок по количеству человек в машине (без пассажиров, 1, 2, 3, 4 и более пассажиров). Также добавить столбцы к предыдущим результатам с самой дорогой и самой дешевой поездкой для каждой группы.

По итогу должна получиться таблица (parquet) с колонками date, percentage_zero, percentage_1p, percentage_2p, percentage_3p, percentage_4p_plus. Технологический стек – sql, scala (что-то одно).

Дополнительно: также провести аналитику и построить график на тему “как пройденное расстояние и количество пассажиров влияет на чаевые” в любом удобном инструменте.

План реализации

Используемые технологии

Технологический стек – Apache Spark 3.3.1, Scala 12, Kubernetes (Minikube 1.28.0).

Kubernetes - оркестратор контейнеров промышленного уровня.

Spark - самый главный инструмент для трансформации данных. Он легко может загрузить csv файл и выгрузить результат в parquet.

Scala хороша тем, что это типизированный язык. Много синтаксических ошибок будет выявлено ещё на этапе компиляции.

В качестве файловой системы используется обычная файловая система хостовой машины.

Схема

CSV файл кладется куда-то в локальную папку. Эта папка монтируется в Kubernetes. Оттуда его берет Spark и после некоторых трансформаций кладет parquet файлы обратно в эту папку.

График

Настройка и запуск

Статья о том как монтировать локальную папку в Kubernetes.

minikube version: v1.28.0

Пример
minikube start --driver=kvm2

# Билдим образ:
docker build -f ./docker/Dockerfile -t izair/taxi_service:1.0.5 .
docker push izair/taxi_service:1.0.5

# Заранее пулим:
minikube ssh docker pull izair/taxi_service:1.0.5

# Монтируем папку на minikube:
minikube mount /source_path:/tmp/taxi_service

# Проверим, что она там есть:
minikube ssh
ls /tmp/taxi_service
exit

# Потом смонтированную папку смонтируем на POD:
export VOLUME_TYPE=hostPath
export VOLUME_NAME=demo-host-mount
export MOUNT_PATH=/tmp/taxi_service

# Открываем порт 8001:
kubectl proxy

spark-submit \
  --master=k8s://http://127.0.0.1:8001 \
  --deploy-mode cluster \
  --name taxi_service \
  --class org.example.App \
  --conf "spark.kubernetes.container.image=izair/taxi_service:1.0.5" \
  --conf spark.kubernetes.driver.volumes.$VOLUME_TYPE.$VOLUME_NAME.mount.path=$MOUNT_PATH \
  --conf spark.kubernetes.driver.volumes.$VOLUME_TYPE.$VOLUME_NAME.options.path=$MOUNT_PATH \
  --conf spark.kubernetes.executor.volumes.$VOLUME_TYPE.$VOLUME_NAME.mount.path=$MOUNT_PATH \
  --conf spark.kubernetes.executor.volumes.$VOLUME_TYPE.$VOLUME_NAME.options.path=$MOUNT_PATH \
  --conf spark.executor.instances=1 \
  --conf spark.driver.memory=512m \
  --conf spark.executor.memory=512m \
  --conf spark.driver.cores=1 \
  --conf spark.executor.cores=1 \
  --conf spark.kubernetes.namespace=default \
  local:///opt/taxi_service-1.0-jar-with-dependencies.jar

# Смотрим логи:
minikube dashboard

Результаты разработки

В результате был создан проект со следующей структурой:

.
├── analysis                   # jupyter notebook analysis
├── data                       # data files
├── docker                     # docker files
├── docs                       # documentation
├── images                     # screenshots
├── src                        # source files
└── README.md

В папке data лежит файл head.csv с первыми несколькими строками из yellow_tripdata_2020-01.csv и parquet файл с результатом его обработки.

Пример результата обработки

График1График2

Выводы

На основании графиков можно сделать следующие выводы:

  1. Если убрать выбросы, то видно, что постепенно горка опускается. Значит чем больше дистанция поездки, тем меньше чаевые. Возможно, люди думают, что если много заплатить за поездку, то чаевых можно не оставлять.

    График1

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

    График2

About

Проект № 5 для курса "Инженер данных".

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published