RDD и DataFrames
Абстракции данных Spark
«RDD и DataFrames» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Что такое Apache Spark?
Apache Spark — это распределённый движок для обработки данных в больших масштабах. Он разделяет данные между узлами кластера и выполняет вычисления параллельно. Scala — нативный язык Spark, обеспечивающий лаконичный API с учётом типов.
RDD
Отказоустойчивый распределённый набор данных (RDD) — низкоуровневая абстракция Spark: неизменяемая секционированная коллекция, которую можно обрабатывать параллельно и восстанавливать по истории преобразований при отказе узла.
SparkContext и SparkSession
Точкой входа в Spark служит SparkSession. Его sparkContext создаёт RDD, а сама сессия создаёт DataFrame и выполняет SQL.
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder()
.appName("Demo")
.master("local[*]")
.getOrCreate()Создание RDD
Создайте RDD, распараллелив локальную коллекцию или прочитав файл. Каждая секция обрабатывается отдельной задачей.
val sc = spark.sparkContext
val numbers = sc.parallelize(Seq(1, 2, 3, 4, 5))
val lines = sc.textFile("data.txt")DataFrame
DataFrame — это распределённая таблица с именованными типизированными столбцами, подобная RDD строк вместе со схемой. Оптимизатор Catalyst может строить план и оптимизировать запросы к DataFrame.
Создание DataFrame
Создавайте DataFrame из коллекций с помощью toDF или считывайте их из структурированных файлов, таких как CSV, JSON или Parquet.
import spark.implicits._
val df = Seq(("Alice", 30), ("Bob", 25)).toDF("name", "age")
val csv = spark.read.option("header", "true").csv("people.csv")Просмотр DataFrame
Используйте show для вывода строк, printSchema для просмотра типов столбцов и count для подсчёта строк.
df.printSchema()
df.show()
println(df.count())Наборы данных и безопасность типов
Dataset — это типизированный DataFrame: Dataset[T], где T — класс-образец. Он сочетает оптимизацию DataFrame с проверкой типов во время компиляции.
import spark.implicits._
case class Person(name: String, age: Int)
val ds = Seq(Person("Alice", 30)).toDS()RDD, DataFrame или Dataset
Выбирайте абстракцию в зависимости от задачи:
- RDD — полный контроль, отсутствие схемы и оптимизатора
- DataFrame — схема и оптимизация Catalyst, нетипизированные строки
- Dataset — схема, оптимизация и безопасность типов
Преобразование между ними
Преобразуйте DataFrame в RDD с помощью .rdd, а RDD классов-образцов — в DataFrame с помощью .toDF. Dataset также преобразуется в DataFrame с помощью .toDF.
val rdd = df.rdd // DataFrame -> RDD[Row]
val back = ds.toDF() // Dataset -> DataFrameКоллекция Scala
Концептуально DataFrame ведёт себя как распределённая коллекция Scala. Для наглядности рассмотрим локальный автономный аналог.
object Main {
case class Person(name: String, age: Int)
def main(args: Array[String]): Unit = {
val people = Seq(Person("Alice", 30), Person("Bob", 25))
people.foreach(p => println(s"${p.name}: ${p.age}"))
}
}Быстрая проверка
Какая абстракция предоставляет схему, оптимизацию Catalyst и безопасность типов во время компиляции?
Итоги
Вы познакомились с абстракциями данных Spark:
SparkSessionкак точка входа- RDD — низкоуровневая распределённая коллекция
- DataFrame — распределённая таблица со схемой
- Dataset — типизированный DataFrame
Далее: преобразования и действия.
Часто задаваемые вопросы
Урок «RDD и DataFrames» бесплатный?
Да — полный текст урока «RDD и DataFrames» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «RDD и DataFrames»?
Абстракции данных Spark Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «RDD и DataFrames»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- RDD и DataFrames
- Преобразования и действия
- Spark SQL
- Агрегации