Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede Goiçin
Not
Bu özellik Beta sürümündedir ve üretimde kullanılabilir.
Beta döneminde Databricks, kodunuzun bağlı olduğu belirli bir alt sürüm için Go dili ile ilgili Databricks SDK'sına bağımlılığı, örneğin bir projenin go.mod dosyasında sabitlemenizi önerir. 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.modbağımlılıklarını izlemek için birgo mod initdosya oluşturun, örneğin:go mod init samplekomutunu çalıştırarak
go mod edit -requirego için Databricks SDK'sı paketine bağımlılığı alın ve değerini CHANGELOG'da0.8.0en son sürümüyle değiştirin:go mod edit -require github.com/databricks/databricks-sdk-go@v0.8.0Dosyanız
go.modşu şekilde görünmelidir:module sample go 1.18 require github.com/databricks/databricks-sdk-go v0.8.0Projenizde 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.gobir 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 tidyeksik modül bağımlılıklarını ekleyin:go mod tidyNot
hatasını
go: warning: "all" matched no packagesalı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
mainpaketlerin derlemelerini ve testlerini desteklemek için gereken tüm paketlerin kopyalarınıgo mod vendoralın:go mod vendorAzure Databricks kimlik doğrulaması için geliştirme makinenizi ayarlayın.
komutunu çalıştırarak, adlı
main.gobir dosya varsayarak Go kod dosyanızı çalıştırıngo run:go run main.goNot
Önceki çağrısında
*databricks.Configbağımsız değişken olarak ayarlanmadığındanw := databricks.Must(databricks.NewWorkspaceClient()), 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 getProjenizin kökünden komutunu çalıştırın, güncelleştirme yapılacak bayrağı belirtin-uve 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.0güncelleştirmek için aşağıdaki komutu çalıştırın:go get -u github.com/databricks/databricks-sdk-go@v0.12.0komutunu ç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 tidyKomutunu çalıştırarak modülünüzdeki
mainpaketlerin derlemelerini ve testlerini desteklemek için gereken tüm yeni ve güncelleştirilmiş paketlerin kopyalarınıgo mod vendoralı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 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 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
DATABRICKS_CONFIG_PROFILEortam değişkenini ö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
WorkspaceClientoluş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
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 ana bilgisayarı ve erişim belirteci değerlerini sabit olarak 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 birimlerinde 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 birimlerinde dosyaları yönetme
Bu kod örneği, Unity Catalog içindeki files'e erişim sağlamak için WorkspaceClient içindeki işlevlerine ç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)
}
}
Sorun giderme
Bu bölümde Go için Databricks SDK'sı ile ilgili yaygın sorunların çözümleri açıklanmaktadır.
Sorunları veya diğer geri bildirimleri bildirmek için Go için Databricks SDK'sı için bir GitHub sorunu oluşturun.
Hata: Yanıt ayrıştırılamıyor
Go için Databricks SDK'sını kullanmaya çalışırken aşağıdaki hatayı alırsanız, neredeyse her zaman kimlik doğrulama yapılandırmanızla ilgili bir sorun olduğunu gösterir.
Error: unable to parse response. This is likely a bug in the Databricks SDK for Go or the underlying REST API.
Bu hatayla karşılaşırsanız aşağıdakileri doğrulayın:
- Databricks ana bilgisayarınızın doğru ayarlandığından emin olun.
- Kimlik doğrulama yönteminin gerçekleştirmeye çalıştığınız API işlemi için gerekli izinlere sahip olduğunu onaylayın.
- Kurumsal güvenlik duvarının arkasındaysanız API trafiğini engellemediğinden veya yeniden yönlendirmediğinden emin olun.
Bu hatanın yaygın nedenlerinden biri, SDK'yı oturum açma sayfasına yönlendiren ve SDK'nın işleyemediği özel bağlantıdır. Bu durum genellikle VPC uç noktasının ait olduğu ağdan farklı bir ağdan genel İnternet erişimi olmadan yapılandırılmış özel bağlantı özellikli bir çalışma alanına erişmeye çalışırken ortaya çıkar.
Daha fazla ayrıntı için bkz:
Ek kaynaklar
Daha fazla bilgi için bkz.