#apache_spark

2025-06-05

Пишем движок SQL на Spark. Часть 8: CREATE FUNCTION

В предыдущих сериях ( 1 • 2 • 3 • 4 • 5 • 6 • 7 • Ы ) рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL, заточенный на задачи подготовки и трансформации наборов данных, и работающий как тонкая прослойка поверх Spark RDD API. Штука получилась довольно продвинутая, с поддержкой императивщины типа циклов/ветвлений/переменных, и даже с поддержкой пользовательских процедур. И в плане этой самой императивщины расширяемая: может импортировать функции из Java classpath, равно как и операторы выражений. То есть, если необходимо, можно написать функцию на Java, или определить новый оператор, и использовать потом в любом выражении на SQL. Круто? Ещё как круто. Но как-то однобоко. Если в языке у нас поддерживаются функции, то почему бы не дать нашим пользователям определять их самостоятельно? Вот прямо через CREATE FUNCTION ? Тем более, что вся необходимая для этого инфраструктура уже вовсю присутствует. Да и процедуры на уровне интерпретатора у нас уже поддерживаются ведь… Функция для затравки.

habr.com/ru/articles/915964/

#etl #apache_spark #java #hadoop_stack #big_data #big_data_tools #big_data_solutions #sql #никто_не_прочитает_эту_статью #написанную_для_отчётности_по_гранту

バックアップからリストアしたDynamoDB テーブルに格納されているデータをAWS Glueを用いて元のテーブルに複製する
dev.classmethod.jp/articles/tr

#dev_classmethod #AWS_Glue #Amazon_DynamoDB #Apache_Spark #AWS

【AWS Glue】Glueジョブでdynamic_frameをソースに利用したらキャストエラーで困った話
dev.classmethod.jp/articles/aw

#dev_classmethod #AWS_Glue #Apache_Spark #PySpark #Apache_Iceberg

2025-05-27

Иногда приходится¹ копаться² в кишках³ Apache Spark

¹ …просто потому, что другого варианта добиться необходимого результата тупо не существует. ² и да, довольно-таки глубоко. ³ нет, серьёзно! Давайте рассмотрим следующий бизнесовый кейс. Дано: реально большие данные. Очень много датасетов по много терабайтов каждый, — в сумме объём тянет на петабайты. Лежат в облаке, но это не важно. Важно, что мы эти данные покупаем в «сыром» виде, каким-то образом «готовим», а потом перепродаём конечному потребителю. Требуется: при подготовке каждого из датасетов разделить его согласно значениям одного или нескольких полей, составляющих его записи, на несколько. И это одна из особенно часто встречающихся в нашем процессе операций. Довольно-таки сложный, продвинутый ETL у нас. Поясню на типичном примере.

habr.com/ru/articles/913244/

#кейс #etl #apache_spark #java #pipeline_automation #hadoop_stack #big_data #big_data_tools #big_data_solutions #sql #никто_не_прочитает_эту_статью #написанную_для_отчётности_по_гранту

2025-05-15

Оптимизация Spark-приложений: шаг за шагом от базовых техник до продвинутых приёмов

В этой статье мы делимся опытом оптимизации Spark-кода на реальных задачах: рассказываем, как с помощью ручного и автоматического репартицирования ускорить обработку данных, как правильно настраивать оконные функции и запускать множество небольших Spark-приложений внутри одного процесса для экономии ресурсов. Привет, Хабр! Меня зовут Александр Маркачев и я — Data Engineer команды Голосовой Антифрод в билайн. Расскажу, как борьба с мошенниками может обернуться личным вызовом. Все техники сопровождаются объяснениями, примерами и рекомендациями для самостоятельного повторения.

habr.com/ru/companies/oleg-bun

#spark #bigdata #data_engineering #билайн #онтико #оптимизация #многопоточность #apache_spark #beeline

[レポート]Apache Iceberg を使用してリアルタイムの洞察のためのオープンテーブルデータレイクを構築する #AWSreInvent
dev.classmethod.jp/articles/re

#dev_classmethod #AWS #Apache_Iceberg #Apache_Spark #AWS_Glue_Data_Catalog

2024-10-19

Apache Spark: настройка и отладка

Большинство современных приложений содержат в себе набор настроек по умолчанию, позволяющий обеспечить достаточно эффективную работу разворачиваемого приложения что называется «из коробки». Есть конечно критики данного подхода, но в целом он позволяет автоматизировать процесс установки и базовой настройки целевой системы. Однако, при серьезном использовании любой системы рано или поздно возникает необходимость в гибкой настройке. А необходимость в отладке как правило возникает гораздо раньше. Apache Spark в этом плане не является исключением и в этой статье мы поговорим о механизмах настройки Spark и некоторых параметрах, которые пользователям может понадобиться отрегулировать под свои нужды. Также мы рассмотрим механизмы журналирования.

habr.com/ru/companies/otus/art

#apache_spark #python

2024-10-18

Инфраструктура для Data-Engineer Data Lake Apache Iceberg

В этой статье вы узнаете что такое Apache Iceberg, как его можно использовать и для чего он вообще нужен. В статье также рассматривается вопрос Data Lake.

habr.com/ru/articles/850674/

#data #data_lake #data_engineering #data_engineer #apache_spark #apache_iceberg #sql #дата_лейк #озеро_данных #datalakehouse

2024-08-23

Искусство ETL. Пишем собственный движок SQL на Spark [часть 7]

В предыдущих сериях ( FAQ • 1 • 2 • 3 • 4 • 5 • 6 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных. В данной части поговорим о том, как добавить в собственный диалект SQL поддержку процедур. Например, -- library.tdl

CREATE PROCEDURE dwellTimeByMode(@signals, @target, @outPrefix,
@modes = ['pedestrian', 'non_pedestrian', 'car', 'bike'],
@groupid='cell10') AS BEGIN
LOOP $mode IN $modes BEGIN
SELECT * FROM $signals INTO "{$signals}/{$mode}" WHERE mode=$mode;

CALL dwellTime(@signals_userid_attr=userid,
@target_userid_attr=userid,
@target_grouping_attr=$groupid
) INPUT signals FROM "{$signals}/{$mode}", target FROM $target
OUTPUT INTO "{$outPrefix}/{$mode}";

ANALYZE "{$signals}/{$mode}";
ANALYZE "{$outPrefix}/{$mode}";
END;
END;

--- ... --- ... --- ... ---

-- script.tdl

CALL dwellTimeByMode(@signals=$this_month, @target=$population, @outPrefix=$this_month); Нафига это надо? Ну, допустим, у нас уже есть некоторое количество SQL ETL кода, наработанного за время эксплуатации инструмента в продакшене, и становится заметно, что значительная часть скриптов на разных проектах совпадает, и из раза в раз повторяется. Логично было бы вынести все эти совпадающие куски в библиотеку, чтобы держать в одном месте, да и вызывать с какими надо параметрами, когда надо. Вот прям как на примере выше.

habr.com/ru/articles/838034/

#etl #apache_spark #java #pipeline_automation #hadoop_stack #big_data #big_data_tools #big_data_solutions #sql #никто_не_прочитает_эту_статью #написанную_для_отчётности_по_гранту

2024-07-09

Работа с данными в Apache Spark

Фреймворк Spark позволяет выполнять множество различных операций с распределенными наборами данных. При этом, объем обрабатываемых данных может быть достаточно большим. Конечно, можно сохранять обрабатываемую информацию в файлы, но что делать, если набор данных не умещается на одном компьютере или на одном дисковом хранилище. Для решения данной проблемы фреймворк поддерживает широкий диапазон различных механизмов ввода/вывода. Это можно объяснить в том числе и тем, что Apache Spark создавался в экосистеме Hadoop, предназначенной для работы с большими данными. Так, для доступа к данным Spark использует интерфейсы InputFormat и OutputFormat из Hadoop MapReduce, программной платформы, предназначенной для создания заданий, обрабатывающих большие объемы данных. А данные интерфейсы, в свою очередь поддерживают множество форматов файлов и систем хранения (SЗ, HDFS, Cassandra, HBаsе и т. д.)

habr.com/ru/companies/otus/art

#apache_spark #python #apache_hadoop

2024-04-19

Искусство ETL. Пишем собственный движок SQL на Spark [часть 6]

В предыдущих сериях ( FAQ • 1 • 2 • 3 • 4 • 5 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных. В данной части поговорим о том, как добавить в выражения SQL поддержку функций. Например, SELECT
MAX(score1, score2, score3, score4, score5) AS max_score,
MIN(score1, score2, score3, score4, score5) AS min_score,
MEDIAN(score1, score2, score3, score4, score5) AS median_score,
score1 + score2 + score3 + score4 + score5 AS score_sum
FROM raw_scores INTO final_scores
WHERE ABS(score1 + score2 + score3 + score4 + score5) > $score_margin; — тут у нас функции MAX , MIN и MEDIAN принимают любое количество аргументов типа Double и возвращают Double , а ABS только один такой аргумент. Вообще, кроме общей математики, в любом уважающем себя диалекте SQL как минимум должны быть функции для манипуляций с датой/временем, работы со строками и массивами. Их мы тоже обязательно добавим. В classpath, чтобы движок мог их оттуда подгружать. До кучи, ещё и операторы типа >= или LIKE , которые у нас уже были реализованы, но хардкодом, сделаем такими же подключаемыми. Предупреждение о сложности материала Уровень сложности данной серии статей в целом высокий. Базовые понятия в тексте совсем не объясняются, да и продвинутые далеко не все. Однако, эта часть несколько проще для ознакомления, чем предыдущие. Но всё равно, понимать её будет легче, если вы уже пробежались по остальным хотя бы по диагонали.

habr.com/ru/articles/808483/

#etl #apache_spark #java #pipeline_automation #hadoop_stack #big_data #big_data_tools #big_data_solutions #sql #любите_ли_вы_твёрдую_НФ?

2024-04-15

Spark. План запросов на примерах

Всем привет! В этой статье возьмем за основу пару таблиц и пройдемся по планам запросов по нарастающей: от обычного селекта до джойнов, оконок и репартиционирования. Посмотрим, чем отличаются виды планов друг от друга, что в них изменяется от запроса к запросу и разберем каждую строчку на примере партиционированной и непартиционированной таблицы.

habr.com/ru/articles/807421/

#apache_spark #pyspark #sql #python #bigdata #data_engineering #explain #execution_plan #план_запроса #dataframe

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst