Spark SQL
Запрашивайте данные
«Spark SQL» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Что такое Spark SQL?
Spark SQL позволяет выполнять запросы к распределённым данным с помощью стандартного SQL или типизированного API DataFrame. Оба варианта проходят через один и тот же оптимизатор Catalyst, поэтому работают одинаково.
Временные представления
Чтобы выполнять SQL-запросы к DataFrame, зарегистрируйте его как представление. createOrReplaceTempView делает его доступным для запросов по имени в текущем сеансе.
val df = Seq(("Alice", 30), ("Bob", 25)).toDF("name", "age")
df.createOrReplaceTempView("people")Выполнение SQL-запроса
Используйте spark.sql со строкой SQL. Он возвращает новый DataFrame, который можно дополнительно преобразовать или отобразить.
val adults = spark.sql("SELECT name FROM people WHERE age >= 18")
adults.show()DSL для DataFrame
Тот же запрос в типизированном DSL. Объект functions предоставляет col, операции сравнения и множество встроенных выражений.
import org.apache.spark.sql.functions._
val adults = df.filter(col("age") >= 18).select("name")Выбор и переименование
Выбирайте столбцы с помощью select, а переименовывайте их с помощью as / alias. Вычисляемые столбцы используют выражения над col.
import org.apache.spark.sql.functions._
df.select(
col("name"),
(col("age") + 1).as("age_next_year")
).show()Фильтрация строк
where и filter являются синонимами. Объединяйте условия с помощью && и ||, а для отсутствующих данных используйте isNull / isNotNull.
import org.apache.spark.sql.functions._
df.where(col("age") > 20 && col("name").isNotNull).show()Сортировка и ограничение
orderBy сортирует данные (для сортировки по убыванию используйте desc), а limit ограничивает количество возвращаемых строк.
import org.apache.spark.sql.functions._
df.orderBy(col("age").desc).limit(5).show()Объединения
Объединяйте два DataFrame по ключу с помощью join. Укажите тип объединения, например "inner", "left" или "outer".
val joined = orders.join(customers, Seq("customer_id"), "inner")
joined.show()Встроенные функции
Пакет functions предлагает сотни вспомогательных функций: upper, concat, when, round, функции для работы с датами и многое другое.
import org.apache.spark.sql.functions._
df.withColumn("name_upper", upper(col("name")))
.withColumn("category", when(col("age") >= 30, "senior").otherwise("junior"))
.show()Чтение и запись таблиц
Spark SQL читает и записывает данные во многих форматах. Parquet использует столбцовое хранение и эффективен; saveAsTable сохраняет данные в хранилище метаданных.
val data = spark.read.parquet("input.parquet")
data.write.mode("overwrite").parquet("output.parquet")Простой SQL-подобный запрос на Scala
Самодостаточный аналог: запрос к коллекции в памяти с помощью методов коллекций отражает работу Spark SQL с SELECT/WHERE.
object Main {
case class Person(name: String, age: Int)
def main(args: Array[String]): Unit = {
val people = Seq(Person("Alice", 30), Person("Bob", 25))
val adults = people.filter(_.age >= 18).map(_.name)
println(adults.mkString(", "))
}
}Быстрая проверка
Что необходимо сделать с DataFrame перед выполнением запроса с помощью spark.sql("SELECT ...")?
Итоги
Вы выполняли запросы к данным с помощью Spark SQL:
- регистрировали представления с помощью
createOrReplaceTempView - выполняли SQL через
spark.sqlили DSL для DataFrame - использовали
select,where,orderBy,join - встроенные функции и ввод-вывод Parquet
Далее: агрегации.
Часто задаваемые вопросы
Урок «Spark SQL» бесплатный?
Да — полный текст урока «Spark SQL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «Spark SQL»?
Запрашивайте данные Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Spark SQL»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.