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í osobním přístupovým tokenem 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 osobní přístupový token pro skripty projektu R. Do souboru projektu .Renviron R můžete například přidat následující kód. Nahraďte <your-workspace-url> svou adresou URL pro jednotlivé pracovní prostory, například https://adb-1234567890123456.7.azuredatabricks.net. 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 Vytvoření osobních přístupových tokenů 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 > Zdroj nebo Zdroj s ozvěnou.

  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á jednoho pracovníka 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řit práci

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. Inicializujte protokolovací balík, nastavte, kam se mají zprávy protokolovat, a určete úroveň protokolování. Například následující kód protokoluje všechny ERROR zprávy a zprávy nižší úrovně 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í rámce jazyka R, jako testthat. K otestování vašeho kódu za simulovaných podmínek bez volání koncových bodů REST API Azure Databricks nebo změny stavu vašich účtů či pracovních prostorů Azure Databricks můžete použít R knihovny pro vytváření simulací, jako je mockery.

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 souboru s názvem main.R, který volá funkci 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)

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: