Databricks SDK för R

Kommentar

Den här artikeln beskriver Databricks SDK för R av Databricks Labs, som är i ett experimentellt tillstånd. Om du vill ge feedback, ställa frågor och rapportera problem använder du fliken Problem i Databricks SDK för R-lagringsplatsen i GitHub.

I den här artikeln får du lära dig hur du automatiserar åtgärder på Azure Databricks-arbetsytor och relaterade resurser med Databricks SDK för R. Den här artikeln kompletterar Dokumentationen om Databricks SDK för R.

Kommentar

Databricks SDK för R stöder inte automatisering av åtgärder i Azure Databricks-konton. Om du vill anropa åtgärder på kontonivå använder du ett annat Databricks SDK, till exempel:

Innan du börjar

Innan du börjar använda Databricks SDK för R måste utvecklingsdatorn ha:

  • En personlig åtkomsttoken för Azure Databricks för den Azure Databricks-målarbetsyta som du vill automatisera.

    Kommentar

    Databricks SDK för R stöder endast personlig åtkomsttokenautentisering i Azure Databricks.

  • R, och eventuellt en R-kompatibel integrerad utvecklingsmiljö (IDE). Databricks rekommenderar RStudio Desktop och använder det i den här artikelns instruktioner.

Kom igång med Databricks SDK för R

  1. Gör url:en för din Azure Databricks-arbetsyta och din personliga åtkomsttoken tillgänglig för R-projektets skript. Du kan till exempel lägga till följande i en R-projektfil .Renviron . Ersätt <your-workspace-url> med url:en per arbetsyta, till exempel https://adb-1234567890123456.7.azuredatabricks.net. Ersätt <your-personal-access-token> med din personliga åtkomsttoken för Azure Databricks, till exempel dapi12345678901234567890123456789012.

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

    Gör följande för att skapa en personlig åtkomsttoken för Azure Databricks:

    1. I din Azure Databricks-arbetsyta klickar du på ditt Användarnamn för Azure Databricks i det övre fältet och väljer sedan Inställningar i listrutan.
    2. Klicka på Utvecklare.
    3. Bredvid Åtkomsttoken klickar du på Hantera.
    4. Klicka på Generera ny token.
    5. (Valfritt) Ange en kommentar som hjälper dig att identifiera den här token i framtiden och ändra tokens standardlivslängd på 90 dagar. Om du vill skapa en token utan livslängd (rekommenderas inte) lämnar du rutan Livslängd (dagar) tom (tom).
    6. Klicka på Generera.
    7. Kopiera den visade token till en säker plats och klicka sedan på Klar.

    Kommentar

    Se till att spara den kopierade token på en säker plats. Dela inte din kopierade token med andra. Om du förlorar den kopierade token kan du inte återskapa exakt samma token. I stället måste du upprepa den här proceduren för att skapa en ny token. Om du förlorar den kopierade token eller om du tror att token har komprometterats rekommenderar Databricks starkt att du omedelbart tar bort den token från arbetsytan genom att klicka på papperskorgsikonen (Återkalla) bredvid token på sidan Åtkomsttoken .

    Om du inte kan skapa eller använda token på din arbetsyta kan det bero på att arbetsyteadministratören har inaktiverat token eller inte har gett dig behörighet att skapa eller använda token. Se din arbetsyteadministratör eller följande:

    Fler sätt att ange url:en för din Azure Databricks-arbetsyta och personlig åtkomsttoken finns i Autentisering i Databricks SDK för R-lagringsplatsen i GitHub.

    Viktigt!

    Lägg inte till filer i .Renviron versionskontrollsystem eftersom detta riskerar att exponera känslig information, till exempel personliga åtkomsttoken för Azure Databricks.

  2. Installera Databricks SDK för R-paketet. I RStudio Desktop i konsolvyn (Visa > Flytta fokus till konsol) kör du till exempel följande kommandon, ett i taget:

    install.packages("devtools")
    library(devtools)
    install_github("databrickslabs/databricks-sdk-r")
    

    Kommentar

    Databricks SDK för R-paketet är inte tillgängligt på CRAN.

  3. Lägg till kod för att referera till Databricks SDK för R och för att lista alla kluster på din Azure Databricks-arbetsyta. I ett projekts main.r fil kan koden till exempel vara följande:

    require(databricks)
    
    client <- DatabricksClient()
    
    list_clusters(client)[, "cluster_name"]
    
  4. Kör skriptet. I RStudio Desktop går du till exempel till skriptredigeraren med ett projekts main.r fil aktiv och klickar på Källkälla > eller Källa med Echo.

  5. Listan över kluster visas. I RStudio Desktop finns det till exempel i konsolvyn .

Kodexempel

Följande kodexempel visar hur du använder Databricks SDK för R för att skapa och ta bort kluster och skapa jobb.

Skapa ett kluster

Det här kodexemplet skapar ett kluster med den angivna Databricks Runtime-versionen och klusternodtypen. Det här klustret har en arbetare och klustret avslutas automatiskt efter 15 minuters inaktiv tid.

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 = "")
)

Ta bort ett kluster permanent

Det här kodexemplet tar bort klustret permanent med det angivna kluster-ID:t från arbetsytan.

require(databricks)

client <- DatabricksClient()

cluster_id <- readline("ID of the cluster to delete (for example, 1234-567890-ab123cd4):")

delete_cluster(client, cluster_id)

Skapa ett jobb

Det här kodexemplet skapar ett Azure Databricks-jobb som kan användas för att köra den angivna notebook-filen i det angivna klustret. När den här koden körs hämtar den den befintliga notebook-filens sökväg, det befintliga kluster-ID:t och relaterade jobbinställningar från användaren i konsolen.

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 = "")
)

Loggning

Du kan använda det populära logging paketet för att logga meddelanden. Det här paketet har stöd för flera loggningsnivåer och anpassade loggformat. Du kan använda det här paketet för att logga meddelanden till konsolen eller till en fil. Gör följande för att logga meddelanden:

  1. Installera paketet logging. I RStudio Desktop kör du till exempel följande kommandon i konsolvyn (Visa > Flytta fokus till konsol):

    install.packages("logging")
    library(logging)
    
  2. Starta loggningspaketet, ange var meddelandena ska loggas och ange loggningsnivån. Följande kod loggar till exempel alla ERROR meddelanden och nedan till results.log filen.

    basicConfig()
    addHandler(writeToFile, file="results.log")
    setLevel("ERROR")
    
  3. Logga meddelanden efter behov. Följande kod loggar till exempel eventuella fel om koden inte kan autentisera eller visa namnen på de tillgängliga klustren.

    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)
    })
    

Testning

Om du vill testa koden kan du använda R-testramverk som testthat. Om du vill testa din kod under simulerade förhållanden utan att anropa Azure Databricks REST API-slutpunkter eller ändra tillståndet för dina Azure Databricks-konton eller arbetsytor kan du använda R-modelleringsbibliotek, till exempel hån.

Till exempel med följande fil med namnet helpers.r som innehåller en createCluster funktion som returnerar information om det nya klustret:

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)
}

Och med följande fil med namnet main.R som anropar createCluster funktionen:

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)

Följande fil med namnet test-helpers.py testar om createCluster funktionen returnerar det förväntade svaret. I stället för att skapa ett kluster på målarbetsytan hånar det här testet ett DatabricksClient objekt, definierar inställningarna för det simulerade objektet och skickar sedan det simulerade objektet till createCluster funktionen. Testet kontrollerar sedan om funktionen returnerar det nya simulerade klustrets förväntade ID.

# 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")
    }
  )
})

Ytterligare resurser

Mer information finns i: