Delen via


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 bewerkingen in Azure Databricks-werkruimten en gerelateerde resources 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.

Aan de slag met de Databricks SDK voor R

  1. 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 toegangstoken dapi12345678901234567890123456789012van Azure Databricks.

    DATABRICKS_HOST=<your-workspace-url>
    DATABRICKS_TOKEN=<your-personal-access-token>
    

    Ga als volgt te werk om een persoonlijk toegangstoken voor Azure Databricks te maken:

    1. Klik in uw Azure Databricks-werkruimte op de gebruikersnaam van Azure Databricks in de bovenste balk en selecteer vervolgens Instellingen in de vervolgkeuzelijst.
    2. Klik op Ontwikkelaars.
    3. Klik naast Access-tokens op Beheren.
    4. Klik op Nieuw token genereren.
    5. (Optioneel) Voer een opmerking in waarmee u dit token in de toekomst kunt identificeren en de standaardlevensduur van het token van 90 dagen kunt wijzigen. Als u een token zonder levensduur wilt maken (niet aanbevolen), laat u het vak Levensduur (dagen) leeg (leeg).
    6. Klik op Genereren.
    7. Kopieer het weergegeven token naar een veilige locatie en klik vervolgens op Gereed.

    Notitie

    Zorg ervoor dat u het gekopieerde token op een veilige locatie opslaat. Deel uw gekopieerde token niet met anderen. Als u het gekopieerde token kwijtraakt, kunt u dat token niet opnieuw genereren. In plaats daarvan moet u deze procedure herhalen om een nieuw token te maken. Als u het gekopieerde token kwijtraakt of als u denkt dat het token is aangetast, raadt Databricks u ten zeerste aan dat u dat token onmiddellijk uit uw werkruimte verwijdert door te klikken op het prullenbakpictogram (Intrekken) naast het token op de pagina Toegangstokens .

    Als u geen tokens in uw werkruimte kunt maken of gebruiken, kan dit komen doordat uw werkruimtebeheerder tokens heeft uitgeschakeld of u geen toestemming hebt gegeven om tokens te maken of te gebruiken. Neem de werkruimtebeheerder of het volgende weer:

    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.

  2. 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.

  3. Voeg code toe om te verwijzen naar de Databricks SDK voor R en om alle clusters in uw Azure Databricks-werkruimte weer te geven. In het bestand van main.r een project kan de code bijvoorbeeld als volgt zijn:

    require(databricks)
    
    client <- DatabricksClient()
    
    list_clusters(client)[, "cluster_name"]
    
  4. 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.

  5. De lijst met 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:

  1. 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)
    
  2. Bootstrap het logboekregistratiepakket, stel in waar de berichten moeten worden vastgelegd en stel het logboekregistratieniveau in. Met de volgende code worden bijvoorbeeld alle ERROR berichten en hieronder vastgelegd in het results.log bestand.

    basicConfig()
    addHandler(writeToFile, file="results.log")
    setLevel("ERROR")
    
  3. Logboekberichten indien nodig. Met de volgende code worden bijvoorbeeld fouten vastgelegd als de code de namen van de beschikbare clusters niet kan verifiëren of vermelden.

    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: