Работали ли вы с PySpark?

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

Ответ

Да, я использовал PySpark в нескольких проектах для обработки больших объемов данных. Основной опыт связан с ETL-пайплайнами, агрегацией данных и подготовкой признаков для моделей машинного обучения.

Пример типичной задачи: чтение данных из облачного хранилища (S3), их очистка, трансформация и агрегация с последующей записью в аналитическую базу данных.

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count

spark = SparkSession.builder 
    .appName("CustomerAnalytics") 
    .config("spark.sql.shuffle.partitions", "200") 
    .getOrCreate()

df = spark.read.parquet("s3a://bucket/raw_transactions/")

# Агрегация и фильтрация
result_df = df.filter(col("amount") > 0) 
    .groupBy("customer_id") 
    .agg(
        avg("amount").alias("avg_transaction"),
        count("*").alias("transaction_count")
    ) 
    .filter(col("transaction_count") > 10)

result_df.write.mode("overwrite").parquet("s3a://bucket/aggregated/")

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

  • Оптимизация производительности через настройку партиций (repartition(), coalesce()) и использование правильных форматов данных (Parquet/ORC).
  • Использование Spark SQL и DataFrame API для декларативной работы, что позволяет Catalyst Optimizer эффективно строить планы выполнения.
  • Отладка и профилирование заданий с помощью Spark UI для выявления узких мест (data skew, excessive shuffles).