Databricks SDK voor R
Notitie
In dit artikel wordt de Databricks SDK voor R door Databricks Labs behandeld, die een experimentele status heeft. Als u feedback wilt geven, vragen wilt stellen en problemen wilt melden, gebruikt u het tabblad Problemen in de Databricks SDK voor R-opslagplaats in GitHub.
In dit artikel leert u hoe u Azure Databricks-bewerkingen in Azure Databricks-werkruimten automatiseert met de Databricks SDK voor R. Dit artikel is een aanvulling op de Databricks SDK voor R-documentatie.
Notitie
De Databricks SDK voor R biedt geen ondersteuning voor de automatisering van bewerkingen in Azure Databricks-accounts. Als u bewerkingen op accountniveau wilt aanroepen, gebruikt u een andere Databricks SDK, bijvoorbeeld:
Voordat u begint
Voordat u de Databricks SDK voor R gaat gebruiken, moet uw ontwikkelcomputer beschikken over:
Een persoonlijk azure Databricks-toegangstoken voor de Azure Databricks-doelwerkruimte die u wilt automatiseren.
Notitie
De Databricks SDK voor R ondersteunt alleen verificatie van persoonlijke toegangstokens van Azure Databricks.
R, en optioneel een met R compatibele integrated development environment (IDE). Databricks raadt RStudio Desktop aan en gebruikt deze in de instructies van dit artikel.
Get gestart met de Databricks SDK voor R
Maak de URL van uw Azure Databricks-werkruimte en het persoonlijke toegangstoken beschikbaar voor de scripts van uw R-project. U kunt bijvoorbeeld het volgende toevoegen aan het bestand van
.Renviron
een R-project. Vervang<your-workspace-url>
bijvoorbeeld door uw URLhttps://adb-1234567890123456.7.azuredatabricks.net
per werkruimte. Vervang<your-personal-access-token>
bijvoorbeeld door uw persoonlijke toegangstokendapi12345678901234567890123456789012
van Azure Databricks.DATABRICKS_HOST=<your-workspace-url> DATABRICKS_TOKEN=<your-personal-access-token>
Als u een persoonlijk toegangstoken voor Azure Databricks wilt maken, volgt u de stappen op persoonlijke toegangstokens van Azure Databricks voor werkruimtegebruikers.
Zie Verificatie in de Databricks SDK voor R-opslagplaats in GitHub voor aanvullende manieren om de URL en het persoonlijke toegangstoken van uw Azure Databricks-werkruimte op te geven.
Belangrijk
Voeg geen bestanden toe
.Renviron
aan versiebeheersystemen, omdat hierdoor gevoelige informatie, zoals persoonlijke toegangstokens van Azure Databricks, wordt blootgesteld.Installeer het Databricks SDK-pakket voor R. Voer bijvoorbeeld in RStudio Desktop, in de consoleweergave (View > Move Focus to Console), de volgende opdrachten één voor één uit:
install.packages("devtools") library(devtools) install_github("databrickslabs/databricks-sdk-r")
Notitie
De Databricks SDK voor R-pakket is niet beschikbaar op CRAN.
Voeg code toe om te verwijzen naar de Databricks SDK voor R en om alle clusters in uw Azure Databricks-werkruimte te list. In het bestand van
main.r
een project kan de code bijvoorbeeld als volgt zijn:require(databricks) client <- DatabricksClient() list_clusters(client)[, "cluster_name"]
Voer uw script uit. Klik bijvoorbeeld in RStudio Desktop in de scripteditor met het bestand van
main.r
een project dat actief is op Bronbron > of Bron met Echo.De list van clusters wordt weergegeven. In RStudio Desktop bevindt dit zich bijvoorbeeld in de consoleweergave .
Codevoorbeelden
In de volgende codevoorbeelden ziet u hoe u de Databricks SDK voor R gebruikt om clusters te maken en te verwijderen en taken te maken.
Een cluster maken
In dit codevoorbeeld wordt een cluster gemaakt met de opgegeven Databricks Runtime-versie en het type clusterknooppunt. Dit cluster heeft één werkrol en het cluster wordt na 15 minuten niet-actieve tijd automatisch beëindigd.
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 = "")
)
Een cluster definitief verwijderen
In dit codevoorbeeld wordt het cluster definitief verwijderd met de opgegeven cluster-id uit de werkruimte.
require(databricks)
client <- DatabricksClient()
cluster_id <- readline("ID of the cluster to delete (for example, 1234-567890-ab123cd4):")
delete_cluster(client, cluster_id)
Een taak maken
In dit codevoorbeeld wordt een Azure Databricks-taak gemaakt die kan worden gebruikt om het opgegeven notebook op het opgegeven cluster uit te voeren. Terwijl deze code wordt uitgevoerd, worden het pad van het bestaande notebook, de bestaande cluster-id en gerelateerde taakinstellingen van de gebruiker in de console opgehaald.
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 = "")
)
Logboekregistratie
U kunt het populaire logging
pakket gebruiken om berichten te registreren. Dit pakket biedt ondersteuning voor meerdere logboekniveaus en aangepaste logboekindelingen. U kunt dit pakket gebruiken om berichten aan te melden bij de console of een bestand. Ga als volgt te werk om berichten te registreren:
Installeer het
logging
-pakket. Voer bijvoorbeeld in RStudio Desktop in de consoleweergave (View > Move Focus to Console) de volgende opdrachten uit:install.packages("logging") library(logging)
Bootstrap het logboekregistratiepakket setwhere om de berichten te registreren en set het logboekregistratieniveau. Met de volgende code worden bijvoorbeeld alle
ERROR
berichten en hieronder vastgelegd in hetresults.log
bestand.basicConfig() addHandler(writeToFile, file="results.log") setLevel("ERROR")
Logboekberichten indien nodig. Met de volgende code worden bijvoorbeeld fouten vastgelegd als de code niet kan worden geverifieerd of list de namen van de beschikbare clusters.
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) })
Testen
Als u uw code wilt testen, kunt u R-testframeworks zoals testthat gebruiken. Als u uw code wilt testen onder gesimuleerde omstandigheden zonder Azure Databricks REST API-eindpunten aan te roepen of de status van uw Azure Databricks-accounts of -werkruimten te wijzigen, kunt u R-mockingbibliotheken zoals mockery gebruiken.
Bijvoorbeeld, op basis van het volgende bestand met de naam helpers.r
van een createCluster
functie die informatie retourneert over het nieuwe cluster:
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)
}
En op basis van het volgende bestand met de naam main.R
waarmee de createCluster
functie wordt aangeroepen:
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)
Het volgende bestand met de naam test-helpers.py
test of de createCluster
functie het verwachte antwoord retourneert. In plaats van een cluster te maken in de doelwerkruimte, wordt met deze test een DatabricksClient
object gesimuleerd, worden de instellingen van het gesimuleerde object gedefinieerd en wordt het gesimuleerde object vervolgens doorgegeven aan de createCluster
functie. De test controleert vervolgens of de functie de verwachte id van het nieuwe gesimuleerde cluster retourneert.
# 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")
}
)
})
Aanvullende bronnen
Zie voor meer informatie: