Go için Databricks SDK'sı
Bu makalede Go için Databricks SDK'sı ile Azure Databricks hesaplarında, çalışma alanlarında ve ilgili kaynaklarda işlemleri otomatikleştirmeyi öğreneceksiniz. Bu makalede Go README için Databricks SDK'sı, API başvurusu ve örnekler desteklenir.
Not
Bu özellik Beta sürümündedir ve üretimde kullanılabilir.
Beta döneminde Databricks, go için Databricks SDK'sının kodunuzun bağlı olduğu belirli bir alt sürüme bağımlılığı sabitlemenizi önerir. Örneğin, projenin go.mod
dosyasında. Bağımlılıkları sabitleme hakkında daha fazla bilgi için bkz . Bağımlılıkları yönetme.
Başlamadan önce
Go için Databricks SDK'sını kullanmaya başlamadan önce geliştirme makinenizde aşağıdakiler olmalıdır:
- Go yüklü.
- Azure Databricks kimlik doğrulaması yapılandırıldı.
Go için Databricks SDK'sını kullanmaya başlama
Go'nun zaten yüklü olduğu geliştirme makinenizde, zaten oluşturulmuş bir Go kodu projesi ve Azure Databricks kimlik doğrulaması yapılandırılmış durumda, komutunu çalıştırarak Go kodunuzun
go mod init
bağımlılıklarını izlemek için birgo.mod
dosya oluşturun, örneğin:go mod init sample
komutunu çalıştırarak
go mod edit -require
go için Databricks SDK'sı paketine bağımlılığı alın ve değerini CHANGELOG'da listelenen Go için Databricks SDK paketinin en son sürümüyle değiştirin0.8.0
:go mod edit -require github.com/databricks/databricks-sdk-go@v0.8.0
Dosyanız
go.mod
şu şekilde görünmelidir:module sample go 1.18 require github.com/databricks/databricks-sdk-go v0.8.0
Projenizde Go için Databricks SDK'sını içeri aktaran bir Go kod dosyası oluşturun. Aşağıdaki örnek, aşağıdaki içeriklere sahip adlı
main.go
bir dosyada Azure Databricks çalışma alanınızdaki tüm kümeleri listeler:package main import ( "context" "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/service/compute" ) func main() { w := databricks.Must(databricks.NewWorkspaceClient()) all, err := w.Clusters.ListAll(context.Background(), compute.ListClustersRequest{}) if err != nil { panic(err) } for _, c := range all { println(c.ClusterName) } }
komutunu çalıştırarak
go mod tidy
eksik modül bağımlılıklarını ekleyin:go mod tidy
Not
hatasını
go: warning: "all" matched no packages
alırsanız, Go için Databricks SDK'sını içeri aktaran bir Go kod dosyası eklemeyi unuttunuz.Komutunu çalıştırarak modülünüzdeki
main
paketlerin derlemelerini ve testlerini desteklemek için gereken tüm paketlerin kopyalarınıgo mod vendor
alın:go mod vendor
Azure Databricks kimlik doğrulaması için geliştirme makinenizi ayarlayın.
komutunu çalıştırarak, adlı
main.go
bir dosya varsayarak Go kod dosyanızı çalıştırıngo run
:go run main.go
Not
Önceki çağrısında
w := databricks.Must(databricks.NewWorkspaceClient())
bağımsız değişken olarak ayarlanmadığından*databricks.Config
, Go için Databricks SDK'sı Azure Databricks kimlik doğrulamasını gerçekleştirmeye çalışmak için varsayılan işlemini kullanır. Bu varsayılan davranışı geçersiz kılmak için bkz . Azure Databricks hesabınız veya çalışma alanınızla Go için Databricks SDK'sının kimliğini doğrulama.
Go için Databricks SDK'sını güncelleştirme
Go projenizi CHANGELOG'da listelenen Go için Databricks SDK paketlerinden birini kullanacak şekilde güncelleştirmek için aşağıdakileri yapın:
go get
Projenizin kökünden komutunu çalıştırın, güncelleştirme yapılacak bayrağı belirtin-u
ve Go için Databricks SDK paketinin adını ve hedef sürüm numarasını sağlayın. Örneğin, sürümüne0.12.0
güncelleştirmek için aşağıdaki komutu çalıştırın:go get -u github.com/databricks/databricks-sdk-go@v0.12.0
komutunu çalıştırarak eksik ve güncel olmayan modül bağımlılıklarını ekleyin ve güncelleştirin
go mod tidy
:go mod tidy
Komutunu çalıştırarak modülünüzdeki
main
paketlerin derlemelerini ve testlerini desteklemek için gereken tüm yeni ve güncelleştirilmiş paketlerin kopyalarınıgo mod vendor
alın:go mod vendor
Azure Databricks hesabınız veya çalışma alanınızla Go için Databricks SDK'sının kimliğini doğrulama
Go için Databricks SDK'sı, kimlik doğrulamasına yönelik birleştirilmiş ve tutarlı bir mimari ve programlı yaklaşım olan Databricks istemci birleşik kimlik doğrulama standardını uygular. Bu yaklaşım, Azure Databricks ile kimlik doğrulamasını ayarlamayı ve otomatikleştirmeyi daha merkezi ve öngörülebilir hale getirmenizi sağlar. Databricks kimlik doğrulamasını bir kez yapılandırmanıza ve daha fazla kimlik doğrulaması yapılandırması değişikliği yapmadan bu yapılandırmayı birden çok Databricks aracında ve SDK'da kullanmanıza olanak tanır. Go'da daha eksiksiz kod örnekleri de dahil olmak üzere daha fazla bilgi için bkz . Databricks istemcisi birleşik kimlik doğrulaması.
Go için Databricks SDK'sı ile Databricks kimlik doğrulamasını başlatmak için kullanılabilir kodlama desenlerinden bazıları şunlardır:
Aşağıdakilerden birini yaparak Databricks varsayılan kimlik doğrulamasını kullanın:
- Hedef Databricks kimlik doğrulama türü için gerekli alanlarla özel bir Databricks yapılandırma profili oluşturun veya tanımlayın. Ardından ortam değişkenini
DATABRICKS_CONFIG_PROFILE
özel yapılandırma profilinin adına ayarlayın. - Hedef Databricks kimlik doğrulama türü için gerekli ortam değişkenlerini ayarlayın.
Ardından databricks varsayılan kimlik doğrulamasıyla bir nesne örneği
WorkspaceClient
oluşturun:import ( "github.com/databricks/databricks-sdk-go" ) // ... w := databricks.Must(databricks.NewWorkspaceClient())
- Hedef Databricks kimlik doğrulama türü için gerekli alanlarla özel bir Databricks yapılandırma profili oluşturun veya tanımlayın. Ardından ortam değişkenini
Azure Databricks kişisel erişim belirteçleri gibi hassas bilgilerin kodunuzda açığa çıkmasına neden olduğundan, gerekli alanların sabit kodlanması desteklenir ancak önerilmez. Aşağıdaki örnek Databricks belirteci kimlik doğrulaması için Azure Databricks konağı ve erişim belirteci değerlerini sabit kodlar:
import ( "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/config" ) // ... w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{ Host: "https://...", Token: "...", }))
Ayrıca bkz. Go README için Databricks SDK'sında kimlik doğrulaması .
Örnekler
Aşağıdaki kod örneklerinde küme oluşturmak ve silmek, işleri çalıştırmak ve hesap kullanıcılarını listelemek için Go için Databricks SDK'sının nasıl kullanılacağı gösterilmektedir. Bu kod örnekleri Go'nun varsayılan Azure Databricks kimlik doğrulama işlemi için Databricks SDK'sını kullanır.
Ek kod örnekleri için GitHub'daki Go için Databricks SDK deposundaki örnekler klasörüne bakın.
- Küme oluşturma
- Kümeyi kalıcı olarak silme
- İş çalıştırma
- Unity Kataloğu birimlerindeki dosyaları yönetme
- Hesap kullanıcılarını listeleme
Küme oluşturma
Bu kod örneği, kullanılabilir en son Databricks Runtime Uzun Süreli Destek (LTS) sürümüne ve yerel diske sahip en küçük kullanılabilir 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 sonlandırılır. Yöntem CreateAndWait
çağrısı, yeni küme çalışma alanında çalıştırılana kadar kodun duraklatılmış olmasını sağlar.
package main
import (
"context"
"fmt"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/compute"
)
func main() {
const clusterName = "my-cluster"
const autoTerminationMinutes = 15
const numWorkers = 1
w := databricks.Must(databricks.NewWorkspaceClient())
ctx := context.Background()
// Get the full list of available Spark versions to choose from.
sparkVersions, err := w.Clusters.SparkVersions(ctx)
if err != nil {
panic(err)
}
// Choose the latest Long Term Support (LTS) version.
latestLTS, err := sparkVersions.Select(compute.SparkVersionRequest{
Latest: true,
LongTermSupport: true,
})
if err != nil {
panic(err)
}
// Get the list of available cluster node types to choose from.
nodeTypes, err := w.Clusters.ListNodeTypes(ctx)
if err != nil {
panic(err)
}
// Choose the smallest available cluster node type.
smallestWithLocalDisk, err := nodeTypes.Smallest(clusters.NodeTypeRequest{
LocalDisk: true,
})
if err != nil {
panic(err)
}
fmt.Println("Now attempting to create the cluster, please wait...")
runningCluster, err := w.Clusters.CreateAndWait(ctx, compute.CreateCluster{
ClusterName: clusterName,
SparkVersion: latestLTS,
NodeTypeId: smallestWithLocalDisk,
AutoterminationMinutes: autoTerminationMinutes,
NumWorkers: numWorkers,
})
if err != nil {
panic(err)
}
switch runningCluster.State {
case compute.StateRunning:
fmt.Printf("The cluster is now ready at %s#setting/clusters/%s/configuration\n",
w.Config.Host,
runningCluster.ClusterId,
)
default:
fmt.Printf("Cluster is not running or failed to create. %s", runningCluster.StateMessage)
}
// Output:
//
// Now attempting to create the cluster, please wait...
// The cluster is now ready at <workspace-host>#setting/clusters/<cluster-id>/configuration
}
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.
package main
import (
"context"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/clusters"
)
func main() {
// Replace with your cluster's ID.
const clusterId = "1234-567890-ab123cd4"
w := databricks.Must(databricks.NewWorkspaceClient())
ctx := context.Background()
err := w.Clusters.PermanentDelete(ctx, compute.PermanentDeleteCluster{
ClusterId: clusterId,
})
if err != nil {
panic(err)
}
}
İş çalıştırma
Bu kod örneği, belirtilen kümede belirtilen not defterini çalıştıran bir Azure Databricks işi oluşturur. Kod çalışırken, terminaldeki kullanıcıdan mevcut not defterinin yolunu, mevcut küme kimliğini ve ilgili iş ayarlarını alır. Yöntem RunNowAndWait
çağrısı, yeni işin çalışma alanında çalışması bitene kadar kodun duraklatılmış olmasını sağlar.
package main
import (
"bufio"
"context"
"fmt"
"os"
"strings"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/jobs"
)
func main() {
w := databricks.Must(databricks.NewWorkspaceClient())
ctx := context.Background()
nt := jobs.NotebookTask{
NotebookPath: askFor("Workspace path of the notebook to run:"),
}
jobToRun, err := w.Jobs.Create(ctx, jobs.CreateJob{
Name: askFor("Some short name for the job:"),
Tasks: []jobs.JobTaskSettings{
{
Description: askFor("Some short description for the job:"),
TaskKey: askFor("Some key to apply to the job's tasks:"),
ExistingClusterId: askFor("ID of the existing cluster in the workspace to run the job on:"),
NotebookTask: &nt,
},
},
})
if err != nil {
panic(err)
}
fmt.Printf("Now attempting to run the job at %s/#job/%d, please wait...\n",
w.Config.Host,
jobToRun.JobId,
)
runningJob, err := w.Jobs.RunNow(ctx, jobs.RunNow{
JobId: jobToRun.JobId,
})
if err != nil {
panic(err)
}
jobRun, err := runningJob.Get()
if err != nil {
panic(err)
}
fmt.Printf("View the job run results at %s/#job/%d/run/%d\n",
w.Config.Host,
jobRun.JobId,
jobRun.RunId,
)
// Output:
//
// Now attempting to run the job at <workspace-host>/#job/<job-id>, please wait...
// View the job run results at <workspace-host>/#job/<job-id>/run/<run-id>
}
// Get job settings from the user.
func askFor(prompt string) string {
var s string
r := bufio.NewReader(os.Stdin)
for {
fmt.Fprint(os.Stdout, prompt+" ")
s, _ = r.ReadString('\n')
if s != "" {
break
}
}
return strings.TrimSpace(s)
}
Unity Kataloğu birimlerindeki dosyaları yönetme
Bu kod örneği, bir Unity Kataloğu birimine files
erişmek için içindeki WorkspaceClient
işlevlere yönelik çeşitli çağrıları gösterir.
package main
import (
"context"
"io"
"os"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/files"
)
func main() {
w := databricks.Must(databricks.NewWorkspaceClient())
catalog := "main"
schema := "default"
volume := "my-volume"
volumePath := "/Volumes/" + catalog + "/" + schema + "/" + volume // /Volumes/main/default/my-volume
volumeFolder := "my-folder"
volumeFolderPath := volumePath + "/" + volumeFolder // /Volumes/main/default/my-volume/my-folder
volumeFile := "data.csv"
volumeFilePath := volumeFolderPath + "/" + volumeFile // /Volumes/main/default/my-volume/my-folder/data.csv
uploadFilePath := "./data.csv"
// Create an empty folder in a volume.
err := w.Files.CreateDirectory(
context.Background(),
files.CreateDirectoryRequest{DirectoryPath: volumeFolderPath},
)
if err != nil {
panic(err)
}
// Upload a file to a volume.
fileUpload, err := os.Open(uploadFilePath)
if err != nil {
panic(err)
}
defer fileUpload.Close()
w.Files.Upload(
context.Background(),
files.UploadRequest{
Contents: fileUpload,
FilePath: volumeFilePath,
Overwrite: true,
},
)
// List the contents of a volume.
items := w.Files.ListDirectoryContents(
context.Background(),
files.ListDirectoryContentsRequest{DirectoryPath: volumePath},
)
for {
if items.HasNext(context.Background()) {
item, err := items.Next(context.Background())
if err != nil {
break
}
println(item.Path)
} else {
break
}
}
// List the contents of a folder in a volume.
itemsFolder := w.Files.ListDirectoryContents(
context.Background(),
files.ListDirectoryContentsRequest{DirectoryPath: volumeFolderPath},
)
for {
if itemsFolder.HasNext(context.Background()) {
item, err := itemsFolder.Next(context.Background())
if err != nil {
break
}
println(item.Path)
} else {
break
}
}
// Print the contents of a file in a volume.
file, err := w.Files.DownloadByFilePath(
context.Background(),
volumeFilePath,
)
if err != nil {
panic(err)
}
bufDownload := make([]byte, file.ContentLength)
for {
file, err := file.Contents.Read(bufDownload)
if err != nil && err != io.EOF {
panic(err)
}
if file == 0 {
break
}
println(string(bufDownload[:file]))
}
// Delete a file from a volume.
w.Files.DeleteByFilePath(
context.Background(),
volumeFilePath,
)
// Delete a folder from a volume.
w.Files.DeleteDirectory(
context.Background(),
files.DeleteDirectoryRequest{
DirectoryPath: volumeFolderPath,
},
)
}
Hesap kullanıcılarını listeleme
Bu kod örneği, bir Azure Databricks hesabındaki kullanılabilir kullanıcıları listeler.
package main
import (
"context"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/databricks-sdk-go/service/iam"
)
func main() {
a := databricks.Must(databricks.NewAccountClient())
all, err := a.Users.ListAll(context.Background(), iam.ListAccountUsersRequest{})
if err != nil {
panic(err)
}
for _, u := range all {
println(u.UserName)
}
}
Ek kaynaklar
Daha fazla bilgi için bkz.