В этом посте мы рассмотрим доступ к Spark API из различных языков программирования в JVM, а также некоторые соображения по производительности при выходе за пределы языка Scala. Даже если вы работаете за пределами JVM, этот раздел может быть полезен, поскольку языки, не относящиеся к JVM, часто зависят от API Java, а не от API Scala.
Работа на других языках программирования не всегда означает, что вам придется выходить за пределы JVM, а работа в JVM имеет множество преимуществ в производительности, главным образом потому, что вам не нужно копировать данные.
Хотя вам не обязательно нужны специальные библиотеки привязки или адаптеры для доступа к Spark из-за пределов Scala, может быть сложно вызвать код Scala из других языков программирования.
Платформа Spark поддерживает использование лямбда-выражений Java 8 в преобразованиях, а те, кто использует более старые версии JDK, имеют возможность реализовать соответствующий интерфейс из пакета org.apache.spark.api.java.function. Даже в тех случаях, когда вам не нужно копировать данные, работа на другом языке программирования может иметь небольшие, но важные проблемы с производительностью.
Трудность доступа к различным API Scala особенно заметна при вызове функций с тегами классов или при использовании свойств, предоставляемых посредством неявных преобразований типов (например, все функции Double и Tuple RDD).
Для механизмов, которые зависят от неявных преобразований типов, часто предоставляются эквивалентные конкретные классы вместе с явными преобразованиями к ним.
Функциям, которые зависят от тегов классов, можно передавать фиктивные теги классов (скажем, AnyRef), и адаптеры часто делают это автоматически.
Использование конкретных классов вместо неявного преобразования типов обычно не приводит к каким-либо дополнительным издержкам, но фиктивные теги классов могут ограничивать некоторые оптимизации компилятора.
API Java не слишком отличается от API Scala с точки зрения функций, за исключением редких случаев отсутствия функций или API-интерфейсов разработчика.
Поддержка других языков программирования JVM, таких как Clojure с DSL. Фламбо и библиотеки сверкающий , выполняется с использованием различных API Java вместо прямого вызова API Scala. Потому что большинство привязок языков, даже языков, не относящихся к JVM, таких как Python и R, проходят через API. Джава , то будет полезно с этим разобраться.
API Java очень похожи на API Scala, хотя они не полагаются на теги классов и неявные преобразования.
Отсутствие последнего означает, что вместо автоматического преобразования наборов объектов RDD Tuple или double в специальные классы с дополнительными функциями приходится использовать явные функции преобразования типов (например, MapToDouble или MapToPair).
Эти функции определены только для Java RDD; К счастью для совместимости, эти специальные типы являются просто адаптерами для наборов RDD Scala. Кроме того, эти специальные функции возвращают различные типы данных, такие как JavaDoubleRDD и JavaPairRDD, с возможностями, предоставляемыми неявными преобразованиями Scala. Давайте вернемся к каноническому шаблону подсчета слов с использованием Java API (пример 7.1).
Поскольку вызов API Scala из Java иногда может быть непростым, почти все API Spark для Java реализованы на Scala со скрытыми тегами классов и неявными преобразованиями.
Благодаря этому Java-адаптеры представляют собой очень тонкий слой, в среднем состоящий всего из нескольких строк кода, и их переписывание практически не требует усилий.
Пример 7.1. Количество слов (Java)
Теги: #Большие данные #Apache #scala #Профессиональная литература #книги #книгиimport scala.Tuple2;
-
Курсы Mcse 2003 – Обзор
19 Oct, 24 -
Химия
19 Oct, 24 -
22 Примера Невероятных Идей И Дизайнов
19 Oct, 24 -
Подрезиновое Окно
19 Oct, 24 -
Стивен Вольфрам: Воспоминания О Стиве Джобсе
19 Oct, 24 -
Вопрос: Как Отказаться От Услуг Рао?
19 Oct, 24 -
База Данных Ms Sql В Сетевой Папке
19 Oct, 24