Поделиться через


Библиотеки R с областью действия записной книжки

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

Библиотеки, область действия которых ограничена записной книжкой, не сохраняются в сеансах. Необходимо переустанавливать библиотеки, область действия которых ограничена записной книжкой, в начале каждого сеанса или при отсоединении записной книжки от кластера.

Библиотеки, область действия которых ограничена записной книжкой, автоматически доступны для рабочих для пользовательских функций Spark.

Чтобы установить библиотеки для всех записных книжек, подключенных к кластеру, используйте установленные кластером библиотеки. Дополнительные сведения см. в статье Библиотеки кластера.

Установка библиотек, область действия которых ограничена записной книжкой, в R

Вы можете использовать любой знакомый метод установки пакетов в R, например install.packages(), API-интерфейсы разработки или Bioconductor.

Пакеты R доступны для рабочих узлов, а также узла драйвера.

Управление библиотеками, область действия которых ограничена записной книжкой, в R

В этом разделе рассматриваются следующие вопросы.

Установка пакета

require(devtools)

install_version(
  package = "caesar",
  repos   = "http://cran.us.r-project.org"
)

Databricks рекомендует использовать моментальный снимок CRAN в качестве репозитория, чтобы гарантировать воспроизводимые результаты.

devtools::install_github("klutometis/roxygen")

Удаление пакета R из среды записной книжки

Чтобы удалить библиотеку, область действия которых ограничена записной книжкой, используйте команду remove.packages().

remove.packages("caesar")

Библиотеки R, область действия которых ограничена записной книжкой, с пользовательскими функциями Spark

В этом разделе рассматриваются следующие вопросы.

Библиотеки R, область действия которых ограничена записной книжкой, и SparkR

Библиотеки R, область действия которых ограничена записной книжкой, доступны для рабочих ролей SparkR; просто импортируйте библиотеку, чтобы ее использовать. Например, можно выполнить следующую команду, чтобы создать зашифрованное с помощью caesar сообщение с помощью пользовательской функции Spark:

require(devtools)

install_version(
  package = "caesar",
  repos   = "http://cran.us.r-project.org"
)

library(SparkR)
sparkR.session()

hello <- function(x) {
  library(caesar)
  caesar("hello world")
}

spark.lapply(c(1, 2), hello)

Библиотеки R, область действия которых ограничена записной книжкой, и sparklyr

По умолчанию в sparklyr::spark_apply() для аргумента packages присваивается значение TRUE. При этом в рабочие процессы копируются библиотеки в текущем libPaths, позволяющие импортировать и использовать их в рабочих процессах. Например, можно выполнить следующую команду, чтобы создать зашифрованное с помощью caesar сообщение с помощью sparklyr::spark_apply():

require(devtools)

install_version(
  package = "caesar",
  repos   = "http://cran.us.r-project.org"
)

library(sparklyr)
sc <- spark_connect(method = 'databricks')

apply_caes <- function(x) {
  library(caesar)
  caesar("hello world")
}

sdf_len(sc, 5) %>%
  spark_apply(apply_caes)

Если вы не хотите, чтобы библиотеки были доступны для рабочих ролей, задайте для packages значение FALSE.

Изоляция библиотек и размещенного проекта RStudio

RStudio создает отдельный путь к библиотеке для каждого пользователя, поэтому пользователи изолированы друг от друга. Однако путь к библиотеке недоступен для рабочих ролей. Если вы хотите использовать пакет внутри рабочих ролей SparkR в задании, запущенном из RStudio, необходимо установить его с помощью библиотек кластера.

Кроме того, при использовании пользовательских функций sparklyr пакеты, установленные в RStudio, становятся доступными для рабочих ролей при использовании spark_apply(..., packages = TRUE).

Вопросы и ответы

Как установить пакет только на драйвер для всех записных книжек R?

Явно задайте в качестве каталога установки /databricks/spark/R/lib. Например, с помощью install.packages() выполните install.packages("pckg", lib="/databricks/spark/R/lib"). Пакеты, установленные в /databricks/spark/R/lib, являются доступными для всех записных книжек в кластере, но недоступны для рабочих ролей Spark. Чтобы совместно использовать библиотеки между записными книжками и рабочими ролей, используйте библиотеки кластера.

Выполняется ли кэширование библиотек, область действия которых ограничена записной книжкой?

Для библиотек, область действия которых ограничена записной книжкой, кэширование в кластере не реализовано. Если вы установите пакет в записной книжке, а другой пользователь установит тот же пакет в другой записной книжке в том же кластере, то пакет будет загружен, скомпилирован и установлен повторно.