Искусство ETL. Пишем собственный движок SQL на Spark [часть 6]
В предыдущих сериях (FAQ • 1 • 2 • 3 • 4 • 5 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.
В данной части поговорим о том, как добавить в выражения SQL поддержку функций. Например,
— тут у нас функции
Вообще, кроме общей математики, в любом уважающем себя диалекте SQL как минимум должны быть функции для манипуляций с датой/временем, работы со строками и массивами. Их мы тоже обязательно добавим. В classpath, чтобы движок мог их оттуда подгружать. До кучи, ещё и операторы типа
Предупреждение о сложности материала
Уровень сложности данной серии статей в целом высокий. Базовые понятия в тексте совсем не объясняются, да и продвинутые далеко не все. Однако, эта часть несколько проще для ознакомления, чем предыдущие. Но всё равно, понимать её будет легче, если вы уже пробежались по остальным хотя бы по диагонали.
Читать: https://habr.com/ru/articles/808483/?utm_campaign=808483
@a_cup_of_java
В предыдущих сериях (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
, которые у нас уже были реализованы, но хардкодом, сделаем такими же подключаемыми.Предупреждение о сложности материала
Уровень сложности данной серии статей в целом высокий. Базовые понятия в тексте совсем не объясняются, да и продвинутые далеко не все. Однако, эта часть несколько проще для ознакомления, чем предыдущие. Но всё равно, понимать её будет легче, если вы уже пробежались по остальным хотя бы по диагонали.
Читать: https://habr.com/ru/articles/808483/?utm_campaign=808483
@a_cup_of_java
Forwarded from Мобильная разработка
Топ-10 книг по Java в 2024 году
В статье разобрались, какие книги по Java стоит читать на русском языке, а какие – только в оригинале.
Подборка субъективная, но вполне подойдет, если хотите быстро сориентироваться и не вдаваться в пучину подробностей, изучать отзывы и рецензии. К каждой книге коротко прописаны плюсы, минусы и краткий обзор: https://proglib.io/p/top-10-knig-po-java-v-2024-godu-2024-03-01
#книги #java
В статье разобрались, какие книги по Java стоит читать на русском языке, а какие – только в оригинале.
Подборка субъективная, но вполне подойдет, если хотите быстро сориентироваться и не вдаваться в пучину подробностей, изучать отзывы и рецензии. К каждой книге коротко прописаны плюсы, минусы и краткий обзор: https://proglib.io/p/top-10-knig-po-java-v-2024-godu-2024-03-01
#книги #java
JDK Mission Control 9.0.0 Requires JDK 17
Marcus Hirt, director of engineering at Datadog, released JDK Mission Control 9.0.0 almost three years after the release of JDK Mission Control 8. The new release requires JDK 17 and contains several bug fixes and new features such as support for Eclipse 4.30.
By Johan Janssen
Read: https://www.infoq.com/news/2024/04/jdk-mission-control-9/
@a_cup_of_java
Marcus Hirt, director of engineering at Datadog, released JDK Mission Control 9.0.0 almost three years after the release of JDK Mission Control 8. The new release requires JDK 17 and contains several bug fixes and new features such as support for Eclipse 4.30.
By Johan Janssen
Read: https://www.infoq.com/news/2024/04/jdk-mission-control-9/
@a_cup_of_java
Java News Roundup: Jakarta EE 11-M2, JEPs Targeted for JDK 23, Spring Boot, Hibernate, GlassFish
This week's Java roundup for April 15th, 2024 features news highlighting: the second milestone release of Jakarta EE 11; Stream Gathers (Second Preview) and Vector API (Eighth Incubator) targeted for JDK 23; the first release candidate of Spring Boot 3.3.0; the first alpha release of Hibernate 7.0.0; and the fifth milestone release of GlassFish 8.0.0.
By Michael Redlich
Read: https://www.infoq.com/news/2024/04/java-news-roundup-apr15-2024/
@a_cup_of_java
This week's Java roundup for April 15th, 2024 features news highlighting: the second milestone release of Jakarta EE 11; Stream Gathers (Second Preview) and Vector API (Eighth Incubator) targeted for JDK 23; the first release candidate of Spring Boot 3.3.0; the first alpha release of Hibernate 7.0.0; and the fifth milestone release of GlassFish 8.0.0.
By Michael Redlich
Read: https://www.infoq.com/news/2024/04/java-news-roundup-apr15-2024/
@a_cup_of_java
Нагрузи меня, Gatling
Привет. Это статья-туториал про выбор технологии и реализацию проекта нагрузочных тестов для API REST микросервисов. Про себя и специфику продукта, над которым работаю, я подробно описывал тут, когда рассказывал о интеграционных тестах. Здесь этому уделять внимание не буду. Если решитесь продолжать, то Вас ждет длинное чтиво. Результатом потраченного времени и внимания будет понимание того, зачем нужно нагрузочное тестирование, с чего начать, куда двигаться дальше и шаблонный проект нагрузочных тестов, который Вы сможете адаптировать под себя. Все используемые мной технологии в этой статье несут печать Java экосистемы. Это тоже может повлиять на то, решитесь ли Вы продолжать. Поехали ...
Читать
Читать: https://habr.com/ru/companies/alfastrah/articles/808281/?utm_campaign=808281
@a_cup_of_java
Привет. Это статья-туториал про выбор технологии и реализацию проекта нагрузочных тестов для API REST микросервисов. Про себя и специфику продукта, над которым работаю, я подробно описывал тут, когда рассказывал о интеграционных тестах. Здесь этому уделять внимание не буду. Если решитесь продолжать, то Вас ждет длинное чтиво. Результатом потраченного времени и внимания будет понимание того, зачем нужно нагрузочное тестирование, с чего начать, куда двигаться дальше и шаблонный проект нагрузочных тестов, который Вы сможете адаптировать под себя. Все используемые мной технологии в этой статье несут печать Java экосистемы. Это тоже может повлиять на то, решитесь ли Вы продолжать. Поехали ...
Читать
Читать: https://habr.com/ru/companies/alfastrah/articles/808281/?utm_campaign=808281
@a_cup_of_java
DDD простыми словами
Часто в больших компания всё поделено на большие системы. А если система «Legacy», т.е. устаревшая, то часто внутри неё собрано очень много разнородного функционала. По сути такие системы представляют из себя монолитных монстров.
Бывает, что компании решают использовать микросервисный подход, но в результате получают таких же монолитных монстров, но только работающих в Кубере.
Границы систем размыты, нет чёткого понимания, что должно входить в систему, а что нет.
Команды сильно специализированы на конкретную систему и не могут участвовать в доработке никакой другой системы.
По сути, речь идёт о том, что системы становится слишком большими и для их доработки требуется длительный процесс погружения.
Можно ли исправить ситуацию коренным образом?
Читать: https://habr.com/ru/articles/809831/?utm_campaign=809831
@a_cup_of_java
Часто в больших компания всё поделено на большие системы. А если система «Legacy», т.е. устаревшая, то часто внутри неё собрано очень много разнородного функционала. По сути такие системы представляют из себя монолитных монстров.
Бывает, что компании решают использовать микросервисный подход, но в результате получают таких же монолитных монстров, но только работающих в Кубере.
Границы систем размыты, нет чёткого понимания, что должно входить в систему, а что нет.
Команды сильно специализированы на конкретную систему и не могут участвовать в доработке никакой другой системы.
По сути, речь идёт о том, что системы становится слишком большими и для их доработки требуется длительный процесс погружения.
Можно ли исправить ситуацию коренным образом?
Читать: https://habr.com/ru/articles/809831/?utm_campaign=809831
@a_cup_of_java
Предложение Java добавит исключения в переключатель
Read: https://www.infoworld.com/article/3715343/java-proposal-would-add-exception-case-to-switch.html#tk.rss_java
@a_cup_of_java
Read: https://www.infoworld.com/article/3715343/java-proposal-would-add-exception-case-to-switch.html#tk.rss_java
@a_cup_of_java
Oracle JDK Mission Control 9 добавляет темную тему, настраиваемый браузер JVM
Read: https://www.infoworld.com/article/3715364/oracle-jdk-mission-control-9-adds-dark-theme-configurable-jvm-browser.html#tk.rss_java
@a_cup_of_java
Read: https://www.infoworld.com/article/3715364/oracle-jdk-mission-control-9-adds-dark-theme-configurable-jvm-browser.html#tk.rss_java
@a_cup_of_java
Настройка конвейерной сборки Java-проектов в GitLab
Автоматическая доставка проектных артефактов в тестовые и продуктивные среды является безусловной необходимостью современных процессов промышленной разработки ПО.
Мы пройдем полный процесс создания пайплайна для сборки и деплоя при помощи GitLab и сопутствующего ПО. Все операции мы проделаем на одном компьютере, хотя ничто не должно вам помешать сразу или в дальнейшем масштабировать полученное решение на один или несколько серверов. Для экспериментов лучше иметь достаточно современный компьютер с количеством оперативной памяти не менее 16 гигабайт, производительным процессором и хорошим интернет-каналом.
Предполагается, что у вас уже установлены Docker и ssh-сервер и вы немного умеете со всем этим обращаться.
Читать: https://habr.com/ru/companies/haulmont/articles/810151/?utm_campaign=810151
@a_cup_of_java
Автоматическая доставка проектных артефактов в тестовые и продуктивные среды является безусловной необходимостью современных процессов промышленной разработки ПО.
Мы пройдем полный процесс создания пайплайна для сборки и деплоя при помощи GitLab и сопутствующего ПО. Все операции мы проделаем на одном компьютере, хотя ничто не должно вам помешать сразу или в дальнейшем масштабировать полученное решение на один или несколько серверов. Для экспериментов лучше иметь достаточно современный компьютер с количеством оперативной памяти не менее 16 гигабайт, производительным процессором и хорошим интернет-каналом.
Предполагается, что у вас уже установлены Docker и ssh-сервер и вы немного умеете со всем этим обращаться.
Читать: https://habr.com/ru/companies/haulmont/articles/810151/?utm_campaign=810151
@a_cup_of_java
Azure Event Grid Supports MQTT Last Will and Testament in Public Preview
Recently, Microsoft announced the public preview release of the Last Will and Testament (LWT) support in Azure Event Grid's MQTT broker capability, which complies with the MQTTv3.1.1 and MQTTv5 specifications.
By Steef-Jan Wiggers
Read: https://www.infoq.com/news/2024/04/azure-eventgrid-lwt-preview/
@a_cup_of_java
Recently, Microsoft announced the public preview release of the Last Will and Testament (LWT) support in Azure Event Grid's MQTT broker capability, which complies with the MQTTv3.1.1 and MQTTv5 specifications.
By Steef-Jan Wiggers
Read: https://www.infoq.com/news/2024/04/azure-eventgrid-lwt-preview/
@a_cup_of_java
Spring Now Offers Free Access for the Spring Academy Pro Content
The Spring team has announced that the Pro Content from their Spring Academy will no longer require a paid subscription to improve the learning experience for the Spring community. The Spring Academy will continue to provide new content in the future.
By Johan Janssen
Read: https://www.infoq.com/news/2024/04/spring-academy-pro-free/
@a_cup_of_java
The Spring team has announced that the Pro Content from their Spring Academy will no longer require a paid subscription to improve the learning experience for the Spring community. The Spring Academy will continue to provide new content in the future.
By Johan Janssen
Read: https://www.infoq.com/news/2024/04/spring-academy-pro-free/
@a_cup_of_java
21 лучший вопрос и ответ на собеседовании по jQuery
Здравствуйте, ребята, если вы готовитесь к собеседованиям для веб-разработчиков, то подготовка к вопросам по jQuery может принести вам пользу. Хотя многие скажут, что jQuery мертв, но он не мертв, и я все еще работаю с проектами, которые используют jQuery для маленьких и больших вещей. Вот почему так важно знать основные концепции jQuery и вопросы для собеседования, основанные на них. В прошлом я уже делился несколькими вопросами для собеседования по JavaScript и веб-разработке, а в этой статье я собираюсь поделиться вопросами по jQuery, например, что такое $() и т. д. Что такое селекторы, как они работают и т. д. Вы можете использовать эти вопросы, чтобы быстро вспомнить ключевые концепции jQuery для собеседования. Итак, чего же мы ждем, давайте посмотрим на основные вопросы собеседования по jQuery для веб-разработчиков.
Вопросы и учебники для собеседования по Java
Read: http://www.java67.com/2024/04/top-21-jquery-interview-questions-and.html
@a_cup_of_java
Здравствуйте, ребята, если вы готовитесь к собеседованиям для веб-разработчиков, то подготовка к вопросам по jQuery может принести вам пользу. Хотя многие скажут, что jQuery мертв, но он не мертв, и я все еще работаю с проектами, которые используют jQuery для маленьких и больших вещей. Вот почему так важно знать основные концепции jQuery и вопросы для собеседования, основанные на них. В прошлом я уже делился несколькими вопросами для собеседования по JavaScript и веб-разработке, а в этой статье я собираюсь поделиться вопросами по jQuery, например, что такое $() и т. д. Что такое селекторы, как они работают и т. д. Вы можете использовать эти вопросы, чтобы быстро вспомнить ключевые концепции jQuery для собеседования. Итак, чего же мы ждем, давайте посмотрим на основные вопросы собеседования по jQuery для веб-разработчиков.
Вопросы и учебники для собеседования по Java
Read: http://www.java67.com/2024/04/top-21-jquery-interview-questions-and.html
@a_cup_of_java
Pet-проект на Rust нуждается в конструктивной критике
Примерно 8 месяцев назад я написал на Rust pet-проект, который пытается быть подобием Hibernate в экосистеме Java. Я даже опубликовал его в качестве Open Source, но получил негативный отзыв и удалил его с GitHub.
Сейчас я решил вернуться к этому проекту, но подойти к нему с другой стороны. Я бы хотел услышать идеи по проекту от опытных разработчиков на Rust. Что в моем проекте сделано не в идиоматическом стиле Rust и т.д. и т.п. В общем, хочется получить чек-лист того, что в проекте не так и как это исправить.
Читать: https://habr.com/ru/articles/810541/?utm_campaign=810541
@a_cup_of_java
Примерно 8 месяцев назад я написал на Rust pet-проект, который пытается быть подобием Hibernate в экосистеме Java. Я даже опубликовал его в качестве Open Source, но получил негативный отзыв и удалил его с GitHub.
Сейчас я решил вернуться к этому проекту, но подойти к нему с другой стороны. Я бы хотел услышать идеи по проекту от опытных разработчиков на Rust. Что в моем проекте сделано не в идиоматическом стиле Rust и т.д. и т.п. В общем, хочется получить чек-лист того, что в проекте не так и как это исправить.
Читать: https://habr.com/ru/articles/810541/?utm_campaign=810541
@a_cup_of_java
Приглашаем на Cinimex Spring IT Talk в Самаре (офлайн/онлайн)
Привет, Хабр!
После майских праздников мы отправимся в Самару и проведем митап Spring IT Talk!
Встретимся с ИТ-комьюнити и в уютной атмосфере обсудим зоопарк технологий для DevOps-инженера, погрузимся в Kafka Streams и завершим IT-вечер темой преодоления стопперов в профессиональном развитии.
Читать: https://habr.com/ru/companies/cinimex/articles/810677/?utm_campaign=810677
@a_cup_of_java
Привет, Хабр!
После майских праздников мы отправимся в Самару и проведем митап Spring IT Talk!
Встретимся с ИТ-комьюнити и в уютной атмосфере обсудим зоопарк технологий для DevOps-инженера, погрузимся в Kafka Streams и завершим IT-вечер темой преодоления стопперов в профессиональном развитии.
Читать: https://habr.com/ru/companies/cinimex/articles/810677/?utm_campaign=810677
@a_cup_of_java
Разбираемся с динамической памятью (кучей) в приложениях Java
Начнём с простого вопроса. В самом ли деле каждый Java-разработчик понимает, как в Java работает память? Одна из обязанностей любого Java-разработчика — гарантировать, что в результате тонкой настройки приложения на Java из него получится выжать такую производительность, какую только возможно. Требуется время, чтобы научиться управлять памятью в Java и понять этот процесс, это касается всех, кто имеет дело с Java. В этой статье попробую объяснить, как овладеть этими умениями.
Читать: https://habr.com/ru/companies/piter/articles/810707/?utm_campaign=810707
@a_cup_of_java
Начнём с простого вопроса. В самом ли деле каждый Java-разработчик понимает, как в Java работает память? Одна из обязанностей любого Java-разработчика — гарантировать, что в результате тонкой настройки приложения на Java из него получится выжать такую производительность, какую только возможно. Требуется время, чтобы научиться управлять памятью в Java и понять этот процесс, это касается всех, кто имеет дело с Java. В этой статье попробую объяснить, как овладеть этими умениями.
Читать: https://habr.com/ru/companies/piter/articles/810707/?utm_campaign=810707
@a_cup_of_java
Отправка сообщения в несколько слушателей Kafka одновременно
В этой статье описывается способ отправки сообщения в несколько слушателей Kafka одновременно. Несколько слушателей будут получать одно и то же сообщение, от одного и того же отправителя сообщений, в данной реализации решения.
Логика реализована с использованием Java, Spring и Kafka.
Читать: https://habr.com/ru/articles/811087/?utm_campaign=811087
@a_cup_of_java
В этой статье описывается способ отправки сообщения в несколько слушателей Kafka одновременно. Несколько слушателей будут получать одно и то же сообщение, от одного и того же отправителя сообщений, в данной реализации решения.
Логика реализована с использованием Java, Spring и Kafka.
Читать: https://habr.com/ru/articles/811087/?utm_campaign=811087
@a_cup_of_java
Devnexus 2024 Celebrates 20 Years of Java Developer Conferences
Celebrating its 20th year, Devnexus 2024 was held from April 9-11, 2024 at the Georgia World Congress Center in Atlanta, Georgia. The event featured speakers from the Java community who delivered workshops and talks on tracks such as: Agile; Architecture; Artificial Intelligence; Cloud Technology; Core Java; Jakarta EE; Core Java; and Security.
By Michael Redlich
Read: https://www.infoq.com/news/2024/04/devnexus-2024/
@a_cup_of_java
Celebrating its 20th year, Devnexus 2024 was held from April 9-11, 2024 at the Georgia World Congress Center in Atlanta, Georgia. The event featured speakers from the Java community who delivered workshops and talks on tracks such as: Agile; Architecture; Artificial Intelligence; Cloud Technology; Core Java; Jakarta EE; Core Java; and Security.
By Michael Redlich
Read: https://www.infoq.com/news/2024/04/devnexus-2024/
@a_cup_of_java
Управление схемами в Kafka с использованием Schema Registry
Apache Kafka является мощным инструментом для обработки и передачи потоковых данных в реальном времени, который находит широкое применение в различных индустриях для обработки огромных объемов данных с низкой задержкой. В центре этой платформы лежит способность эффективно распределять данные между множеством производителей (producers) и потребителей (consumers), при этом поддерживая высокую пропускную способность и масштабируемость. Однако, с увеличением количества и разнообразия данных, возникает необходимость в управлении структурами этих данных, что обеспечивает Schema Registry. Этот компонент является критически важным для поддержания согласованности данных в Kafka, поскольку он управляет схемами сообщений и обеспечивает совместимость между различными версиями схем, что позволяет системам бесперебойно обмениваться данными даже при изменении структуры сообщений.
Читать: https://habr.com/ru/articles/811283/?utm_campaign=811283
@a_cup_of_java
Apache Kafka является мощным инструментом для обработки и передачи потоковых данных в реальном времени, который находит широкое применение в различных индустриях для обработки огромных объемов данных с низкой задержкой. В центре этой платформы лежит способность эффективно распределять данные между множеством производителей (producers) и потребителей (consumers), при этом поддерживая высокую пропускную способность и масштабируемость. Однако, с увеличением количества и разнообразия данных, возникает необходимость в управлении структурами этих данных, что обеспечивает Schema Registry. Этот компонент является критически важным для поддержания согласованности данных в Kafka, поскольку он управляет схемами сообщений и обеспечивает совместимость между различными версиями схем, что позволяет системам бесперебойно обмениваться данными даже при изменении структуры сообщений.
Читать: https://habr.com/ru/articles/811283/?utm_campaign=811283
@a_cup_of_java
Принципы SOLID, только понятно
Когда я только знакомился с принципами SOLID, я искал понятные статьи на Хабр. При этом пришлось прочитать не одну статью, и полное понимание пришло сильно позже. Хотелось бы, чтобы новички на более простых примерах смогли почувствовать, о чем эти принципы.
Изучить принципы
Читать: https://habr.com/ru/articles/811305/?utm_campaign=811305
@a_cup_of_java
Когда я только знакомился с принципами SOLID, я искал понятные статьи на Хабр. При этом пришлось прочитать не одну статью, и полное понимание пришло сильно позже. Хотелось бы, чтобы новички на более простых примерах смогли почувствовать, о чем эти принципы.
Изучить принципы
Читать: https://habr.com/ru/articles/811305/?utm_campaign=811305
@a_cup_of_java
Java News Roundup: WildFly 32, JEPs Proposed to Target for JDK 23, Hibernate 6.5, JobRunr 7.1
This week's Java roundup for April 22nd, 2024 features news highlighting: the release of WildFly 32; JEP 476, Module Import Declarations (Preview), JEP 474, ZGC: Generational Mode by Default, and JEP 467, Markdown Documentation Comments, proposed to target for JDK 23; Hibernate ORM 6.5; and JobRunr 7.1.
By Michael Redlich
Read: https://www.infoq.com/news/2024/04/java-news-roundup-apr22-2024/
@a_cup_of_java
This week's Java roundup for April 22nd, 2024 features news highlighting: the release of WildFly 32; JEP 476, Module Import Declarations (Preview), JEP 474, ZGC: Generational Mode by Default, and JEP 467, Markdown Documentation Comments, proposed to target for JDK 23; Hibernate ORM 6.5; and JobRunr 7.1.
By Michael Redlich
Read: https://www.infoq.com/news/2024/04/java-news-roundup-apr22-2024/
@a_cup_of_java