R için Databricks SDK'sı

Not

Bu makale, Deneysel durumda olan Databricks Labs tarafından sunulan R için Databricks SDK'sını kapsar. Geri bildirim sağlamak, soru sormak ve sorunları bildirmek için GitHub'daki R deposu için Databricks SDK'sının Sorunlar sekmesini kullanın.

Bu makalede, R için Databricks SDK'sı ile Azure Databricks çalışma alanlarındaki işlemleri ve ilgili kaynakları otomatikleştirmeyi öğreneceksiniz. Bu makale, R için Databricks SDK belgelerini tamamlar.

Not

R için Databricks SDK'sı, Azure Databricks hesaplarındaki işlemlerin otomasyonunu desteklemez. Hesap düzeyinde işlemleri çağırmak için farklı bir Databricks SDK'sı kullanın, örneğin:

  • Python için Databricks SDK'sı
  • Java için Databricks SDK'sı
  • Go için Databricks SDK'sı

Başlamadan önce

R için Databricks SDK'sını kullanmaya başlamadan önce geliştirme makinenizde aşağıdakiler olmalıdır:

  • Otomatikleştirmek istediğiniz hedef Azure Databricks çalışma alanı için bir Azure Databricks kişisel erişim belirteci .

    Not

    R için Databricks SDK'sı yalnızca Azure Databricks kişisel erişim belirteci kimlik doğrulamasını destekler.

  • R ve isteğe bağlı olarak R uyumlu tümleşik geliştirme ortamı (IDE). Databricks, RStudio Desktop'ı önerir ve bu makalenin yönergelerinde kullanır.

R için Databricks SDK'sını kullanmaya başlama

  1. Azure Databricks çalışma alanı URL'nizi ve kişisel erişim belirtecinizi R projenizin betiklerinde kullanılabilir hale getirin. Örneğin, R projesinin .Renviron dosyasına aşağıdakileri ekleyebilirsiniz. değerini çalışma alanı başına URL'nizle değiştirin<your-workspace-url>, örneğinhttps://adb-1234567890123456.7.azuredatabricks.net. değerini Azure Databricks kişisel erişim belirtecinizle değiştirin <your-personal-access-token> , örneğin dapi12345678901234567890123456789012.

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

    Azure Databricks kişisel erişim belirteci oluşturmak için aşağıdakileri yapın:

    1. Azure Databricks çalışma alanınızda üst çubukta Azure Databricks kullanıcı adınıza tıklayın ve açılan listeden Ayarlar seçin.
    2. Geliştirici'ye tıklayın.
    3. Erişim belirteçleri'nin yanındaki Yönet'e tıklayın.
    4. Yeni belirteç oluştur'a tıklayın.
    5. (İsteğe bağlı) Gelecekte bu belirteci tanımlamanıza yardımcı olacak bir açıklama girin ve belirtecin varsayılan 90 günlük ömrünü değiştirin. Yaşam süresi olmayan bir belirteç oluşturmak için (önerilmez), Yaşam Süresi (gün) kutusunu boş (boş) bırakın.
    6. Generate (Oluştur) düğmesine tıklayın.
    7. Görüntülenen belirteci güvenli bir konuma kopyalayın ve bitti'ye tıklayın.

    Not

    Kopyalanan belirteci güvenli bir konuma kaydettiğinizden emin olun. Kopyalanan belirtecinizi başkalarıyla paylaşmayın. Kopyalanan belirteci kaybederseniz, tam olarak aynı belirteci yeniden oluşturamazsınız. Bunun yerine, yeni bir belirteç oluşturmak için bu yordamı yinelemeniz gerekir. Kopyalanan belirteci kaybederseniz veya belirtecin gizliliğinin ihlal edildiğini düşünüyorsanız Databricks, Erişim belirteçleri sayfasındaki belirtecin yanındaki çöp kutusu (İptal Et) simgesine tıklayarak bu belirteci çalışma alanınızdan hemen silmenizi kesinlikle önerir.

    Çalışma alanınızda belirteç oluşturamıyor veya kullanamıyorsanız, bunun nedeni çalışma alanı yöneticinizin belirteçleri devre dışı bırakmış olması veya size belirteç oluşturma veya kullanma izni vermemiş olması olabilir. Çalışma alanı yöneticinize veya aşağıdakilere bakın:

    Azure Databricks çalışma alanı URL'nizi ve kişisel erişim belirtecinizi sağlamanın ek yolları için bkz . GitHub'daki R deposu için Databricks SDK'sında kimlik doğrulaması .

    Önemli

    Bu, Azure Databricks kişisel erişim belirteçleri gibi hassas bilgilerin açığa çıkmasına neden olduğundan sürüm denetim sistemlerine dosya eklemeyin .Renviron .

  2. R paketi için Databricks SDK'sını yükleyin. Örneğin, RStudio Desktop'ta, Konsol görünümünde (Odağı Konsola Taşımayı Görüntüle>) aşağıdaki komutları birer birer çalıştırın:

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

    Not

    R için Databricks SDK paketi CRAN'da kullanılamaz.

  3. R için Databricks SDK'sına başvurmak ve Azure Databricks çalışma alanınızdaki tüm kümeleri listelemek için kod ekleyin. Örneğin, bir projenin main.r dosyasında kod aşağıdaki gibi olabilir:

    require(databricks)
    
    client <- DatabricksClient()
    
    list_clusters(client)[, "cluster_name"]
    
  4. Betiğinizi çalıştırın. Örneğin, RStudio Desktop'ta, projenin main.r dosyasının etkin olduğu betik düzenleyicisinde Kaynak > Kaynak veya Yankılı Kaynak'a tıklayın.

  5. Küme listesi görüntülenir. Örneğin, RStudio Desktop'ta bu, Konsol görünümündedir.

Kod örnekleri

Aşağıdaki kod örnekleri, kümeleri oluşturmak ve silmek ve iş oluşturmak için R için Databricks SDK'sının nasıl kullanılacağını gösterir.

Küme oluşturma

Bu kod örneği, belirtilen Databricks Runtime sürümüne ve küme düğümü türüne sahip bir küme oluşturur. Bu kümenin bir çalışanı vardır ve küme 15 dakikalık boşta kalma süresinden sonra otomatik olarak sonlanır.

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

Kümeyi kalıcı olarak silme

Bu kod örneği, belirtilen küme kimliğine sahip kümeyi çalışma alanından kalıcı olarak siler.

require(databricks)

client <- DatabricksClient()

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

delete_cluster(client, cluster_id)

İş oluşturma

Bu kod örneği, belirtilen not defterini belirtilen kümede çalıştırmak için kullanılabilecek bir Azure Databricks işi oluşturur. Bu kod çalışırken, konsoldaki kullanıcıdan mevcut not defterinin yolunu, mevcut küme kimliğini ve ilgili iş ayarlarını alır.

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

Günlük Kaydı

İletileri günlüğe kaydetmek için popüler logging paketi kullanabilirsiniz. Bu paket birden çok günlük düzeyi ve özel günlük biçimi için destek sağlar. İletileri konsola veya dosyaya kaydetmek için bu paketi kullanabilirsiniz. İletileri günlüğe kaydetmek için aşağıdakileri yapın:

  1. logging paketini yükleyin. Örneğin, RStudio Desktop'ta , Konsol görünümünde (Görünümü > Odağı Konsola Taşı) aşağıdaki komutları çalıştırın:

    install.packages("logging")
    library(logging)
    
  2. Günlük paketini bootstrap yapın, iletilerin günlüğe kaydedileceği yeri ayarlayın ve günlük düzeyini ayarlayın. Örneğin, aşağıdaki kod tüm ERROR iletileri ve altındaki iletileri dosyaya günlüğe results.log kaydeder.

    basicConfig()
    addHandler(writeToFile, file="results.log")
    setLevel("ERROR")
    
  3. İletileri gerektiği gibi günlüğe kaydetme. Örneğin, kod kimlik doğrulaması yapamıyorsa veya kullanılabilir kümelerin adlarını listeleyemiyorsa, aşağıdaki kod hataları günlüğe kaydeder.

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

Test Etme

Kodunuzu test etmek için test gibi R test çerçevelerini kullanabilirsiniz. Azure Databricks REST API uç noktalarını çağırmadan veya Azure Databricks hesaplarınızın veya çalışma alanlarınızın durumunu değiştirmeden kodunuzu sanal koşullar altında test etmek için R sahte kitaplıklarını kullanabilirsiniz.

Örneğin, yeni küme hakkında bilgi döndüren bir createCluster işlev içeren adlı helpers.r aşağıdaki dosya göz önünde bulundurulduğunda:

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

ve işlevini çağıran adlı main.R aşağıdaki dosya göz önünde bulundurulduğunda 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)

Adlı aşağıdaki dosya test-helpers.py , işlevin createCluster beklenen yanıtı döndürip döndürmediğini sınar. Bu test, hedef çalışma alanında küme oluşturmak yerine bir DatabricksClient nesneyle dalga geçer, sahte nesnenin ayarlarını tanımlar ve ardından sahte nesneyi işleve createCluster geçirir. Test daha sonra işlevin yeni sahte kümenin beklenen kimliğini döndürip döndürmediğini denetler.

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

Ek kaynaklar

Daha fazla bilgi için bkz.