Есть ли опыт работы с Apache Spark?

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

Ответ

Да, у меня есть опыт работы с Apache Spark для обработки больших объемов данных.

В рамках проектов я использовал PySpark для:

  • ETL-пайплайнов: Агрегация и очистка логов пользовательских событий объемом в сотни гигабайт в день.
  • Аналитики: Вычисление сложных оконных функций (window functions) для анализа временных рядов.

Ключевые аспекты работы:

  1. Оптимизация:

    • Управление партиционированием данных с помощью repartition() и coalesce() для уменьшения шаффла.
    • Использование persist() с указанием уровня хранения (например, MEMORY_AND_DISK) для кэширования часто используемых датафреймов.
    • Работа с вещательными переменными (broadcast variables) для эффективных join-операций с небольшими справочниками.
  2. Пример кода (PySpark):

    from pyspark.sql import SparkSession
    from pyspark.sql.functions import col, sum, window
    
    spark = SparkSession.builder.appName("SessionAnalysis").getOrCreate()
    
    # Чтение данных
    events_df = spark.read.parquet("s3://bucket/events/*")
    
    # Агрегация сессий по окну
    session_metrics = (events_df
        .withWatermark("event_time", "10 minutes")
        .groupBy(window(col("event_time"), "1 hour"), "user_id")
        .agg(sum("event_value").alias("total_session_value"))
    )
    
    # Запись результата
    session_metrics.write.mode("overwrite").parquet("s3://bucket/output/session_metrics")
  3. Работа с кластером: Опыт запуска заданий на YARN-кластере, мониторинга через Spark UI и настройки конфигураций через spark-submit (количество ядер, объем памяти исполнителей).