← Назад к вопросам

Что такое Apache Spark?

1.3 Junior🔥 171 комментариев
#Apache Spark

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Apache Spark

Apache Spark — это распределённая вычислительная платформа для обработки больших данных, которая работает в памяти (in-memory) и обеспечивает быстрые вычисления.

Основные характеристики

In-memory вычисления: Spark хранит данные в памяти между операциями, что делает его в 10-100 раз быстнее MapReduce.

Поддержка Python, SQL, Scala, Java, R: Можешь писать на любом языке.

Unified API:

  • RDD (Resilient Distributed Dataset) — низкоуровневый API
  • DataFrame/Dataset — высокоуровневый структурированный API
  • SQL — через Spark SQL
  • Streaming — через Spark Streaming
  • MLlib — машинное обучение
  • GraphX — обработка графов

Архитектура

Driver Process
  - SparkContext
  - Task Scheduler
  
Cluster Manager (YARN, Kubernetes, Standalone)
  |
  +-- Executor 1
  +-- Executor 2
  +-- Executor 3

PySpark пример

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

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

# Чтение данных
df = spark.read.csv("data.csv", header=True)

# Трансформация
df_filtered = df.filter(col("age") > 18)

# Агрегация
result = df_filtered.groupBy("city").agg(count("*").alias("count"))

# Вывод
result.show()

RDD vs DataFrame

RDD: Низкоуровневый, неструктурированные данные, медленнее

rdd = spark.sparkContext.parallelize([1, 2, 3, 4, 5])
rdd_squared = rdd.map(lambda x: x ** 2)

DataFrame: Структурированный, оптимизирован Catalyst optimizer, быстрее

df = spark.createDataFrame([(1,), (2,), (3,)], ["value"])
df_squared = df.withColumn("squared", col("value") ** 2)

Spark SQL

df.createOrReplaceTempView("users")
spark.sql("""
    SELECT city, COUNT(*) as count
    FROM users
    WHERE age > 18
    GROUP BY city
""").show()

Catalyst Optimizer

Spark SQL использует Catalyst optimizer для оптимизации запросов:

  1. Logical Planning — распарс SQL, логические операции
  2. Logical Optimization — оптимизация логики
  3. Physical Planning — выбор лучшего физического плана
  4. Code Generation — генерация Java кода

Partitioning и Parallelism

# Увеличить партиции для параллелизма
df_repartitioned = df.repartition(100)

# Оптимизировать по конкретной колонке
df_hash = df.repartition(50, "user_id")

# Узнать количество партиций
print(df.rdd.getNumPartitions())

Spark Jobs и Stages

  • Job: Запуск action (show, collect, save)
  • Stage: Группа трансформаций до shuffle
  • Task: Единица работы на партиции

Когда использовать Spark

✅ Большие объёмы данных (> 10 GB) ✅ Нужны распределённые вычисления ✅ Быстрые итеративные алгоритмы ✅ Streaming обработка ✅ ML на больших данных

❌ Малые данные (< 1 GB) — используй pandas ❌ Одиночные строки — используй БД ❌ Очень низкая латентность (мс) — используй другие системы

Вывод

Apache Spark — индустриальный стандарт для Big Data обработки. Его универсальность, скорость и простота использования делают его выбором номер один для Data Engineer и Data Scientists.

Что такое Apache Spark? | PrepBro