0Pricing
Scala for Backend Engineering & Functional Programming · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. RDD и DataFrames
  2. Преобразования и действия
  3. Spark SQL
  4. Агрегации
← Назад к Scala for Backend Engineering & Functional Programming