Big Data Technologies. Лекция 10. Spark SQL
Искусство ETL. Пишем собственный движок SQL на Spark [часть 1 из 5] В данной серии статей я подробно расскажу о том, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL с использованием Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.— Евдокимов, ты что, совсем уже там кукухой поехал?! При живом-то Spark SQL! Опять ты ненормальным программированием маешься, нет бы что-то полезное делал… — Ну-ну-ну, спокойно, спокойно. Я ещё настолько не уехал, чтобы потратить целый год на страдание полной ерундой. Речь на сей раз пойдёт не о развлекухе, а о диалекте языка, специализированном для решения целого класса задач, для которых любой существующий SQL был бы, в теории, хорошим решением, если бы не несколько серьёзных «но». Короче, у нас будет немного не такой SQL, который вы все так хорошо знаете, но и этот вариант вы полюбите, я обещаю. Тут лучше другой вопрос задать: — Разве кому-то нужен голый SQL-ный движок? Нет, голый — не нужен. Так рассказывать я буду о разработке настоящего production ready инструмента, с интерактивным шеллом с подсветкой синтаксиса и автодополнением, который сможет работать в клиент-серверном режиме, и не только на кластере, но и локально. Да не монолитный, а расширяемый при помощи подключаемых функций. И с автогенератором документации впридачу. Короче, всё будет совсем по-взрослому, с рейтингом M for Mature. В каком смысле «M for Mature»? Уровень сложности данной серии статей — высокий. Базовые понятия по ходу текста вообще не объясняются, да и продвинутые далеко не все. Поэтому, если вы не разработчик, уже знакомый с терминологией из области бигдаты и жаргоном из дата инжиниринга, данные статьи будут сложно читаться, и ещё хуже пониматься. Я предупредил. Читать дальше → https://habr.com/ru/articles/760504/?utm_source=habrahabr&utm_medium=rss&utm_campaign=760504
🔗Обязательные импорты в Spark-приложении # сессия from pyspark.sql import SparkSession # функции from pyspark.sql import functions as F # типы данных from pyspark.sql import types as T # оконки from pyspark.sql.window import Window F и T - это code-style, принятый в PySpark, чтобы избежать пересечений с другими либами. В коде будет так: F.function(args). И вообще импортируем только то, что нужно. import * - это моветон. // датафрейм и сессия import org.apache.spark.sql.{DataFrame, SparkSession} // функции import org.apache.spark.sql.functions._ // импорт всего // udf (кастомные функции) и оконки import org.apache.spark.sql.expressions.{UserDefinedFunction, Window} // типы данных import org.apache.spark.sql.types._ В отличие от питона, в скале нужно указывать типы аргументов в функциях, поэтому мы дополнительно импортируем DataFrame, UserDefinedFunction и Window, т.к. они наиболее часто используются. А сами оконки лежат в модуле functions. def func(df: DataFrame, time_window: Window): DataFrame = {...} #spark