Чем Scala лучше Java для разработки Spark-приложения: ТОП-5 преимуществ

Apache Spark Scala vs Java vs Python, PySpark Spark Scala Java JVM примеры курсы обучение, разработка приложений Spark, Apache Spark для разработчиков и дата-инженеров примеры курсы обучение, Школа Больших Данных Учебный центр Коммерсант

Как разница между Scala и Java отражается на работе Spark-приложения, почему код на Scala работает быстрее и когда выбирать этот язык программирования для разработки приложений аналитики больших данных.

Scala vs Java: ключевые отличия

Хотя Apache Spark позволяет разработчику писать код на нескольких языках программирования (Scala, Java, R, Python), сам фреймворк написан на Scala и работает в JVM. Поэтому именно JVM-языки (Scala, Java) являются более эффективными из-за отсутствия трансляции Python-кода в Java-объекты. В частности, PySpark использует библиотеку Py4J для отправки и вычисления заданий, чтобы программа Python, работающая в интерпретаторе Python, динамически получала доступ к объектам Java в JVM. Методы вызываются так, как будто объекты Java находятся в интерпретаторе Python: к коллекциям Java можно получить доступ через стандартные методы коллекций Python. Py4J также позволяет программам Java вызывать объекты Python. Таким образом, Py4J помогает PySpark со стороны драйвера взаимодействовать с JVM. Поскольку Spark реализован на Scala, почти все данные, поступающие к исполнителю Python и обратно, должны проходить через сокет и исполнительную функцию JVM, что и обеспечивает библиотека Py4J.

Будучи представленным еще в 1995 году, объектно-ориентированный Java до сих пор является лидером среди языков программирования для бэкенда. Однако, он имеет свои недостатки, поэтому в 2003 году в ответ на критику Java появился Scala — высокоуровневый функциональный статически типизированный машинно-компилируемый язык программирования общего назначения. Программа на Scala компилируется в байт-код Java и запускается в JVM. Благодаря этому Scala обеспечивает совместимость с библиотеками Java, на которые можно напрямую ссылаться в коде.

Впрочем, несмотря на поддержку функционального программирования, идеи ООП тоже присутствуют в Scala: каждое значение рассматривается как объект, но все операции выполняются как функции. Таким образом, в Java функции — это объекты, а в Scala они являются переменными. Ни одна переменная не существует сама по себе.

Хотя сегодня в Java присутствуют возможности функционального программирования, Scala изначально создавался именно в этой парадигме. Поэтому в Scala поддерживает такие концепции функционального программирования, как неизменность (immutability), функции высшего порядка и отложенные вычисления. Java поддерживает обратную совместимость, а Scala — нет. В свою очередь, Scala поддерживает перегрузку операторов, а Java — нет.

Код на Scala считается лаконичнее аналога на Java, а меньшее количество строк кода означает более быструю разработку и доставку. В частности, задача, которая требует 20 строк на Java, на Scala займет всего 6, поскольку функциональная природа Scala позволяет естественно использовать лямбда-функции и цепочки, задействуя меньшее количество кода. Производительность Scala выше благодаря оптимизации с помощью хвостовой рекурсии (tail call recursion), которая выполняется на этапе компиляции. В этом подходе рекурсивный вызов, если он является последним выражением в методе, может быть опущен и заменен на итерационное решение.

Некоторые идеи и конструкции Scala-кода сложнее Java. Это повышает порог входа в технологию. Например, хотя большую часть синтаксиса и функций Scala позаимствовал у своего предшественника Java, в этом языке есть некоторые новые структуры, недоступные в Java: case-классы и автоматический вывод типа. Благодаря этому Scala можно использовать в качестве предметно-ориентированного языка (DSL), специфицировав для особенностей конкретного проекта.

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

Разобравшись с отличиями Scala от Java, далее посмотрим, как эта разница отражается на эффективности Spark-приложения.

Преимущества Scala для разработки Spark-приложения

Итак, перечислим основные плюсы Scala как языка программирования для разработки Spark-приложений:

  • скорость — поскольку Spark написан на Scala, можно использовать специализированные конструкции и структуры этого мощного языка программирования;
  • новейшие функции — когда в Spark вводятся новые функции, они обычно реализованы именно на Scala, который является основным языком фреймворка;
  • прототипирование — в Scala есть инструмент REPL (Read-Eval-Print-Loop), который позволяет интерактивно, поэтапно кодировать и отлаживать без необходимости писать и компилировать полную программу. Java не поддерживает REPL, что затрудняет процесс отладки кода;
  • типобезопасность и контроль времени компиляции для операций со всеми структурами данных Spark, включая Dataset;
  • по-настоящему отложенные вычисления. Хотя Spark как фреймворк изначально поддерживает концепцию отложенных вычислений, разделяя операции на преобразования и действия, о чем мы писали здесь и здесь, в Scala такая функция присутствует сама по себе. Явно используя ключевое слово lazy в коде программы, разработчик может отложить трудоемкие вычисления до тех пор, пока они не потребуются. В Java нет такой возможности.

В заключение еще раз отметим, что несмотря на перечисленные достоинства, Scala менее зрелый язык и он требует больше усилий для изучения, включая освоение функционального программирования и более сложных концепций, чем в Java. А владение инструментом является одним из ключевых факторов при выборе технологии. Пока популярность и распространенность Java существенно выше. Однако, эффективное использование возможностей Scala в качестве языка программирования может повысить производительность Spark-приложения, которое выполняет мощные аналитические нагрузки на огромных объемах данных.

Освойте возможности Apache Spark для разработки приложений аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://medium.com/@henrihapponen/why-scala-still-dominates-data-engineering-fd0fd519cf1
  2. https://www.knowledgehut.com/blog/programming/scala-vs-python-vs-r-vs-java
  3. https://www.kv.by/post/1059404-v-chem-razlichiya-scala-i-java
Поиск по сайту