Книга «Эффективная Искра. Масштабирование И Оптимизация



Книга «Эффективная Искра.
</p><p>
 Масштабирование и оптимизация

В этом посте мы рассмотрим доступ к 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)

   

import scala.Tuple2;

Теги: #Большие данные #Apache #scala #Профессиональная литература #книги #книги
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.