Работали ли вы с Apache Spark?

«Работали ли вы с Apache Spark?» — вопрос из категории Apache Spark, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я использовал Apache Spark для распределенной обработки больших данных. Основной опыт связан с PySpark.

Основные задачи:

  • ETL-процессы: Загрузка, очистка и агрегация данных из различных источников (CSV, Parquet, JDBC).
  • Аналитика: Выполнение сложных агрегаций и оконных функций для бизнес-отчетности.
  • Машинное обучение: Использование MLlib для построения и обучения моделей, таких как логистическая регрессия и кластеризация.

Пример кода для обучения модели:

from pyspark.sql import SparkSession
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import VectorAssembler

spark = SparkSession.builder.appName("ModelTraining").getOrCreate()

# Чтение данных
df = spark.read.parquet("hdfs://path/to/training_data")

# Подготовка признаков
assembler = VectorAssembler(inputCols=["feat1", "feat2"], outputCol="features")
df_vectorized = assembler.transform(df)

# Обучение модели
lr = LogisticRegression(featuresCol="features", labelCol="label")
model = lr.fit(df_vectorized)

# Сохранение модели
model.write().overwrite().save("/models/lr_model")

Оптимизация производительности:

  • Управление партиционированием через repartition() и coalesce() для балансировки нагрузки.
  • Кэширование часто используемых DataFrame с помощью .cache() или .persist().
  • Настройка конфигураций Spark (например, spark.sql.shuffle.partitions, spark.executor.memory) под конкретную инфраструктуру.
  • Использование форматов колоночного хранения, таких как Parquet, для ускорения чтения.

Работал как с DataFrame/Dataset API для высокоуровневых операций, так и с RDD для более низкоуровневого контроля. Часто использовал spark.sql() для выполнения запросов в синтаксисе, знакомом аналитикам.