Sdílet prostřednictvím


Databricks SDK pro R

Poznámka:

Tento článek se zabývá sadou Databricks SDK pro R od Databricks Labs, která je v experimentálním stavu. Pokud chcete poskytnout zpětnou vazbu, pokládat otázky a nahlásit problémy, použijte kartu Problémy v úložišti Databricks SDK pro R na GitHubu.

V tomto článku se dozvíte, jak automatizovat operace Azure Databricks v pracovních prostorech Azure Databricks pomocí sady Databricks SDK pro R. Tento článek doplňuje dokumentaci k sadě Databricks SDK pro jazyk R.

Poznámka:

Sada Databricks SDK pro R nepodporuje automatizaci operací v účtech Azure Databricks. Pokud chcete volat operace na úrovni účtu, použijte jinou sadu Databricks SDK, například:

Než začnete

Než začnete používat sadu Databricks SDK pro R, váš vývojový počítač musí mít:

  • Osobní přístupový token Azure Databricks pro cílový pracovní prostor Azure Databricks, který chcete automatizovat.

    Poznámka:

    Sada Databricks SDK pro R podporuje pouze ověřování tokenů pat azure Databricks.

  • R a volitelně integrované vývojové prostředí (IDE) kompatibilní s jazykem R. Databricks doporučuje RStudio Desktop a používá ho v pokynech k tomuto článku.

Začínáme se sadou Databricks SDK pro R

  1. Zpřístupněte adresu URL pracovního prostoru Azure Databricks a token pat pro přístup ke skriptům projektu R. Do souboru projektu .Renviron R můžete například přidat následující kód. Nahraďte adresou URL pro jednotlivé pracovní prostory, například https://adb-1234567890123456.7.azuredatabricks.net.<your-workspace-url> Nahraďte <your-personal-access-token> osobní přístupový token Azure Databricks, například dapi12345678901234567890123456789012.

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

    Pokud chcete vytvořit osobní přístupový token Azure Databricks, postupujte podle kroků v osobních přístupových tokenech Azure Databricks pro uživatele pracovního prostoru.

    Další způsoby, jak poskytnout adresu URL pracovního prostoru Azure Databricks a osobní přístupový token, najdete v tématu Ověřování v úložišti Databricks SDK pro R na GitHubu.

    Důležité

    Nepřidávejte .Renviron soubory do systémů správy verzí, protože toto riziko vystavuje citlivé informace, jako jsou osobní přístupové tokeny Azure Databricks.

  2. Nainstalujte balíček Databricks SDK pro R. Například v RStudio Desktopu v zobrazení konzoly (zobrazení > Přesunout fokus do konzoly) spusťte po jednom následující příkazy:

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

    Poznámka:

    Balíček Databricks SDK pro R není v CRAN dostupný.

  3. Přidejte kód, který odkazuje na sadu Databricks SDK pro R a zobrazí seznam všech clusterů v pracovním prostoru Azure Databricks. Například v souboru projektu main.r může být kód následující:

    require(databricks)
    
    client <- DatabricksClient()
    
    list_clusters(client)[, "cluster_name"]
    
  4. Spusťte skript. Například v RStudio Desktopu v editoru skriptů s aktivním souborem projektu main.r klikněte na Zdroj > nebo Zdroj s echo.

  5. Zobrazí se seznam clusterů. Například v RStudio Desktopu je to v zobrazení konzoly .

Příklady kódu

Následující příklady kódu ukazují, jak pomocí sady Databricks SDK pro R vytvářet a odstraňovat clustery a vytvářet úlohy.

Vytvoření clusteru

Tento příklad kódu vytvoří cluster se zadanou verzí databricks Runtime a typem uzlu clusteru. Tento cluster má jeden pracovní proces a cluster se automaticky ukončí po 15 minutách nečinnosti.

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

Trvalé odstranění clusteru

Tento příklad kódu trvale odstraní cluster se zadaným ID clusteru z pracovního prostoru.

require(databricks)

client <- DatabricksClient()

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

delete_cluster(client, cluster_id)

Vytvoření úlohy

Tento příklad kódu vytvoří úlohu Azure Databricks, která se dá použít ke spuštění zadaného poznámkového bloku v zadaném clusteru. Při spuštění tohoto kódu získá cestu existujícího poznámkového bloku, existující ID clusteru a související nastavení úlohy od uživatele v konzole.

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

Protokolování

K protokolování zpráv můžete použít oblíbený logging balíček. Tento balíček poskytuje podporu pro více úrovní protokolování a vlastních formátů protokolů. Tento balíček můžete použít k protokolování zpráv do konzoly nebo do souboru. Pokud chcete protokolovat zprávy, postupujte takto:

  1. Nainstalujte balíček logging. Například v RStudio Desktopu v zobrazení konzoly (zobrazení > Přesunout fokus do konzoly) spusťte následující příkazy:

    install.packages("logging")
    library(logging)
    
  2. Zaváděcí balíček protokolování, nastavte, kam se mají zprávy protokolovat, a nastavte úroveň protokolování. Následující kód například protokoluje všechny ERROR zprávy a následující zprávy do results.log souboru.

    basicConfig()
    addHandler(writeToFile, file="results.log")
    setLevel("ERROR")
    
  3. Podle potřeby protokolovat zprávy. Následující kód například zaznamená všechny chyby, pokud kód nemůže ověřit nebo vypsat názvy dostupných clusterů.

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

Testování

K otestování kódu můžete použít testovací architektury jazyka R, jako je testthat. K otestování kódu za simulovaných podmínek bez volání koncových bodů rozhraní REST API Služby Azure Databricks nebo změny stavu účtů nebo pracovních prostorů Azure Databricks můžete použít knihovny napodobování jazyka R, jako je napodobení.

Například vzhledem k následujícímu souboru s názvem helpers.r obsahujícím createCluster funkci, která vrací informace o novém clusteru:

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

A vzhledem k následujícímu createCluster souboru, main.R který volá funkci:

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)

Následující soubor s názvem test-helpers.py testuje, zda createCluster funkce vrátí očekávanou odpověď. Místo vytvoření clusteru v cílovém pracovním prostoru tento test napodobí DatabricksClient objekt, definuje nastavení napodobeného objektu a pak předá napodobený objekt funkci createCluster . Test pak zkontroluje, jestli funkce vrátí očekávané ID nového napodobeného clusteru.

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

Další materiály

Další informace naleznete v tématu: