Пакет SDK Databricks для R
Примечание.
В этой статье рассматривается пакет SDK Databricks для R databricks Labs, который находится в экспериментальном состоянии. Чтобы предоставить отзывы, задать вопросы и сообщить о проблемах, используйте вкладку "Проблемы " в пакете SDK Databricks для репозитория R в GitHub.
В этой статье вы узнаете, как автоматизировать операции Azure Databricks в рабочих областях Azure Databricks с помощью пакета SDK Databricks для R. Эта статья дополняет пакет SDK Databricks для R.
Примечание.
Пакет SDK Databricks для R не поддерживает автоматизацию операций в учетных записях Azure Databricks. Для вызова операций на уровне учетной записи используйте другой пакет SDK Databricks, например:
- Пакет SDK Databricks для Python
- Пакет SDK Databricks для Java
- Пакет SDK Databricks для Go
Подготовка к работе
Прежде чем приступить к использованию пакета SDK Databricks для R, компьютер разработки должен иметь следующее:
Личный маркер доступа Azure Databricks для целевой рабочей области Azure Databricks, которую требуется автоматизировать.
Примечание.
Пакет SDK Databricks для R поддерживает только проверку подлинности маркера личного доступа Azure Databricks.
R и, при необходимости, интегрированная среда разработки с совместимостью R. Databricks рекомендует RStudio Desktop и использует его в инструкциях этой статьи.
Начало работы с пакетом SDK Databricks для R
Создайте URL-адрес рабочей области Azure Databricks и личный маркер доступа для сценариев проекта R. Например, можно добавить следующий код в файл проекта
.Renviron
R. Замените<your-workspace-url>
URL-адрес рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
. Замените<your-personal-access-token>
личные маркеры доступа Azure Databricks, напримерdapi12345678901234567890123456789012
.DATABRICKS_HOST=<your-workspace-url> DATABRICKS_TOKEN=<your-personal-access-token>
Чтобы создать личный маркер доступа Azure Databricks, выполните действия, описанные в разделе "Личные маркеры доступа Azure Databricks" для пользователей рабочей области.
Дополнительные способы предоставления URL-адреса рабочей области Azure Databricks и личного маркера доступа см. в статье "Проверка подлинности " в пакете SDK Databricks для репозитория R в GitHub.
Внимание
Не добавляйте
.Renviron
файлы в системы управления версиями, так как это рискует предоставлять конфиденциальную информацию, например личные маркеры доступа Azure Databricks.Установите пакет SDK Databricks для R. Например, в RStudio Desktop в представлении консоли (просмотр фокуса на консоль) выполните следующие команды:>
install.packages("devtools") library(devtools) install_github("databrickslabs/databricks-sdk-r")
Примечание.
Пакет SDK Databricks для R недоступен в CRAN.
Добавьте код для ссылки на пакет SDK Databricks для R и список всех кластеров в рабочей области Azure Databricks. Например, в файле проекта
main.r
код может быть следующим:require(databricks) client <- DatabricksClient() list_clusters(client)[, "cluster_name"]
Запустите скрипт. Например, в RStudio Desktop в редакторе скриптов с активным файлом проекта
main.r
щелкните источник > или источник с помощью Echo.Появится список кластеров. Например, в RStudio Desktop это в представлении консоли .
Примеры кода
В следующих примерах кода показано, как использовать пакет SDK Databricks для R для создания и удаления кластеров и создания заданий.
Создание кластера
В этом примере кода создается кластер с указанной версией Databricks Runtime и типом узла кластера. Этот кластер имеет одну рабочую роль, а кластер автоматически завершает работу через 15 минут времени простоя.
require(databricks)
client <- DatabricksClient()
response <- create_cluster(
client = client,
cluster_name = "my-cluster",
spark_version = "12.2.x-scala2.12",
node_type_id = "Standard_DS3_v2",
autotermination_minutes = 15,
num_workers = 1
)
# Get the workspace URL to be used in the following results message.
get_client_debug <- strsplit(client$debug_string(), split = "host=")
get_host <- strsplit(get_client_debug[[1]][2], split = ",")
host <- get_host[[1]][1]
# Make sure the workspace URL ends with a forward slash.
if (endsWith(host, "/")) {
} else {
host <- paste(host, "/", sep = "")
}
print(paste(
"View the cluster at ",
host,
"#setting/clusters/",
response$cluster_id,
"/configuration",
sep = "")
)
Окончательное удаление пользователя
Этот пример кода окончательно удаляет кластер с указанным идентификатором кластера из рабочей области.
require(databricks)
client <- DatabricksClient()
cluster_id <- readline("ID of the cluster to delete (for example, 1234-567890-ab123cd4):")
delete_cluster(client, cluster_id)
Создание задания
В этом примере кода создается задание Azure Databricks, которое можно использовать для запуска указанной записной книжки в указанном кластере. По мере выполнения этого кода он получает путь к существующей записной книжке, существующий идентификатор кластера и связанные параметры задания от пользователя в консоли.
require(databricks)
client <- DatabricksClient()
job_name <- readline("Some short name for the job (for example, my-job):")
description <- readline("Some short description for the job (for example, My job):")
existing_cluster_id <- readline("ID of the existing cluster in the workspace to run the job on (for example, 1234-567890-ab123cd4):")
notebook_path <- readline("Workspace path of the notebook to run (for example, /Users/someone@example.com/my-notebook):")
task_key <- readline("Some key to apply to the job's tasks (for example, my-key):")
print("Attempting to create the job. Please wait...")
notebook_task <- list(
notebook_path = notebook_path,
source = "WORKSPACE"
)
job_task <- list(
task_key = task_key,
description = description,
existing_cluster_id = existing_cluster_id,
notebook_task = notebook_task
)
response <- create_job(
client,
name = job_name,
tasks = list(job_task)
)
# Get the workspace URL to be used in the following results message.
get_client_debug <- strsplit(client$debug_string(), split = "host=")
get_host <- strsplit(get_client_debug[[1]][2], split = ",")
host <- get_host[[1]][1]
# Make sure the workspace URL ends with a forward slash.
if (endsWith(host, "/")) {
} else {
host <- paste(host, "/", sep = "")
}
print(paste(
"View the job at ",
host,
"#job/",
response$job_id,
sep = "")
)
Ведение журнала
Для журналов сообщений можно использовать популярный logging
пакет. Этот пакет обеспечивает поддержку нескольких уровней ведения журнала и пользовательских форматов журналов. Этот пакет можно использовать для записи сообщений в консоль или в файл. Чтобы регистрировать сообщения, сделайте следующее:
Установите пакет
logging
. Например, в рабочем столе RStudio в представлении консоли (просмотр > фокуса на консоль) выполните следующие команды:install.packages("logging") library(logging)
Загрузите пакет ведения журнала, установите место для регистрации сообщений и задайте уровень ведения журнала. Например, следующий код регистрирует все
ERROR
сообщения и ниже вresults.log
файл.basicConfig() addHandler(writeToFile, file="results.log") setLevel("ERROR")
При необходимости регистрируют сообщения. Например, следующий код регистрирует ошибки, если код не может пройти проверку подлинности или перечислить имена доступных кластеров.
require(databricks) require(logging) basicConfig() addHandler(writeToFile, file="results.log") setLevel("ERROR") tryCatch({ client <- DatabricksClient() }, error = function(e) { logerror(paste("Error initializing DatabricksClient(): ", e$message)) return(NA) }) tryCatch({ list_clusters(client)[, "cluster_name"] }, error = function(e) { logerror(paste("Error in list_clusters(client): ", e$message)) return(NA) })
Тестирование
Для тестирования кода можно использовать платформы тестирования R, такие как testthat. Чтобы протестировать код в имитированных условиях без вызова конечных точек REST API Azure Databricks или изменения состояния учетных записей Или рабочих областей Azure Databricks, можно использовать библиотеки R, такие как насмешка.
Например, учитывая следующий файл с именем helpers.r
, содержащий createCluster
функцию, которая возвращает сведения о новом кластере:
library(databricks)
createCluster <- function(
databricks_client,
cluster_name,
spark_version,
node_type_id,
autotermination_minutes,
num_workers
) {
response <- create_cluster(
client = databricks_client,
cluster_name = cluster_name,
spark_version = spark_version,
node_type_id = node_type_id,
autotermination_minutes = autotermination_minutes,
num_workers = num_workers
)
return(response)
}
И учитывая следующий файл с именем main.R
, который вызывает функцию createCluster
:
library(databricks)
source("helpers.R")
client <- DatabricksClient()
# Replace <spark-version> with the target Spark version string.
# Replace <node-type-id> with the target node type string.
response = createCluster(
databricks_client = client,
cluster_name = "my-cluster",
spark_version = "<spark-version>",
node_type_id = "<node-type-id>",
autotermination_minutes = 15,
num_workers = 1
)
print(response$cluster_id)
Следующий файл с именем test-helpers.py
проверяет, возвращает ли createCluster
функция ожидаемый ответ. Вместо того чтобы создать кластер в целевой рабочей области, этот тест макетирует DatabricksClient
объект, определяет параметры макетированного объекта, а затем передает макетируемый объект в функцию createCluster
. Затем тест проверяет, возвращает ли функция ожидаемый идентификатор нового макетированного кластера.
# install.packages("testthat")
# install.pacakges("mockery")
# testthat::test_file("test-helpers.R")
lapply(c("databricks", "testthat", "mockery"), library, character.only = TRUE)
source("helpers.R")
test_that("createCluster mock returns expected results", {
# Create a mock response.
mock_response <- list(cluster_id = "abc123")
# Create a mock function for create_cluster().
mock_create_cluster <- mock(return_value = mock_response)
# Run the test with the mock function.
with_mock(
create_cluster = mock_create_cluster,
{
# Create a mock Databricks client.
mock_client <- mock()
# Call the function with the mock client.
# Replace <spark-version> with the target Spark version string.
# Replace <node-type-id> with the target node type string.
response <- createCluster(
databricks_client = mock_client,
cluster_name = "my-cluster",
spark_version = "<spark-version>",
node_type_id = "<node-type-id>",
autotermination_minutes = 15,
num_workers = 1
)
# Check that the function returned the correct mock response.
expect_equal(response$cluster_id, "abc123")
}
)
})
Дополнительные ресурсы
Дополнительные сведения см. в разделе: