Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come automatizzare le operazioni di Azure Databricks e accelerare lo sviluppo con il Databricks SDK per Go . Questo articolo integra Databricks SDK per Go README, informazioni di riferimento sulle API ed esempi.
Nota
Questa funzionalità è in versione beta e può essere usata nell'ambiente di produzione.
Durante il periodo Beta, Databricks consiglia di aggiungere una dipendenza dalla versione secondaria specifica del Databricks SDK per Go da cui dipende il codice, ad esempio nel file go.mod di un progetto. Per altre informazioni sull'aggiunta delle dipendenze, vedere Gestione delle dipendenze.
Operazioni preliminari
Prima di iniziare a usare Databricks SDK for Go, il computer di sviluppo deve avere:
- Andare installato.
- Autenticazione di Azure Databricks configurata.
Introduzione a Databricks SDK per Go
Nel computer di sviluppo con Go già installato, un progetto di codice Go esistente già creato e l'autenticazione di Azure Databricks configurata, creare un
go.modfile per tenere traccia delle dipendenze del codice Go eseguendo ilgo mod initcomando, ad esempio:go mod init sampleUsare una dipendenza dal pacchetto Databricks SDK for Go eseguendo il
go mod edit -requirecomando, sostituendo0.8.0con la versione più recente del pacchetto Databricks SDK for Go, come indicato in CHANGELOG:go mod edit -require github.com/databricks/databricks-sdk-go@v0.8.0Il file
go.moddovrà risultare simile al seguente:module sample go 1.18 require github.com/databricks/databricks-sdk-go v0.8.0All'interno del progetto creare un file di codice Go che importa Databricks SDK per Go. L'esempio seguente, in un file denominato
main.gocon il contenuto seguente, elenca tutti i cluster nell'area di lavoro di Azure Databricks: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) } }Aggiungere eventuali dipendenze del modulo mancanti eseguendo il comando
go mod tidy:go mod tidyNota
Se viene visualizzato l'errore
go: warning: "all" matched no packages, si è dimenticato di aggiungere un file di codice Go che importa Databricks SDK per Go.Acquisire copie di tutti i pacchetti necessari per supportare compilazioni e test di pacchetti nel
mainmodulo eseguendo ilgo mod vendorcomando :go mod vendorConfigurare il computer di sviluppo per l'autenticazione di Azure Databricks.
Eseguire il file di codice Go, presupponendo che un file denominato
main.go, eseguendo il comandogo run:go run main.goNota
Non impostando
*databricks.Configcome argomento nella chiamata precedente aw := databricks.Must(databricks.NewWorkspaceClient()), Databricks SDK for Go usa il processo predefinito per tentare di eseguire l'autenticazione di Azure Databricks. Per eseguire l'override di questo comportamento predefinito, vedere Autenticare Databricks SDK per Go con l'account o l'area di lavoro di Azure Databricks.
Aggiornare Databricks SDK per Go
Per aggiornare il progetto Go per usare uno dei pacchetti Databricks SDK per Go, come indicato in CHANGELOG, eseguire le operazioni seguenti:
Eseguire il
go getcomando dalla radice del progetto, specificando il-uflag per eseguire un aggiornamento e specificando il nome e il numero di versione di destinazione del pacchetto Databricks SDK per Go. Ad esempio, per eseguire l'aggiornamento alla versione0.12.0, eseguire il comando seguente:go get -u github.com/databricks/databricks-sdk-go@v0.12.0Aggiungere e aggiornare eventuali dipendenze del modulo mancanti e obsolete eseguendo il
go mod tidycomando :go mod tidyAcquisire copie di tutti i pacchetti nuovi e aggiornati necessari per supportare compilazioni e test di pacchetti nel
mainmodulo eseguendo ilgo mod vendorcomando :go mod vendor
Autenticare Databricks SDK for Go con l'account o l'area di lavoro di Azure Databricks
Databricks SDK per Go implementa lo standard di autenticazione unificata di Databricks , un approccio architetturale e programmatico consolidato e coerente all'autenticazione. Questo approccio consente di configurare e automatizzare l'autenticazione con Azure Databricks più centralizzato e prevedibile. Consente di configurare l'autenticazione di Databricks una sola volta e quindi di usarla tra più strumenti e SDK di Databricks senza ulteriori modifiche alla configurazione dell'autenticazione. Per altre informazioni, inclusi esempi di codice più completi in Go, vedere Autenticazione unificata di Databricks.
Alcuni dei modelli di codifica disponibili per inizializzare l'autenticazione di Databricks con Databricks SDK per Go includono:
Usare l'autenticazione predefinita di Databricks eseguendo una delle operazioni seguenti:
- Creare o identificare un profilo di configurazione di Databricks personalizzato con i campi obbligatori per il tipo di autenticazione databricks di destinazione. Impostare quindi la variabile di ambiente
DATABRICKS_CONFIG_PROFILEsul nome del profilo di configurazione personalizzato. - Impostare le variabili di ambiente necessarie per il tipo di autenticazione di Databricks di destinazione.
Creare quindi un'istanza di un oggetto
WorkspaceClientcon l'autenticazione predefinita di Databricks come indicato di seguito:import ( "github.com/databricks/databricks-sdk-go" ) // ... w := databricks.Must(databricks.NewWorkspaceClient())- Creare o identificare un profilo di configurazione di Databricks personalizzato con i campi obbligatori per il tipo di autenticazione databricks di destinazione. Impostare quindi la variabile di ambiente
L’hardcoded dei campi obbligatori è supportato ma non consigliato, perché rischia di esporre informazioni riservate nel codice, ad esempio i token di accesso personale di Azure Databricks. L'esempio seguente imposta come hardcoded Azure Databricks host e valori dei token di accesso per l'autenticazione del token di Databricks:
import ( "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/config" ) // ... w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{ Host: "https://...", Token: "...", }))
Vedere anche Autenticazione in Databricks SDK per Go README.
Esempi
Gli esempi di codice seguenti illustrano come usare Databricks SDK per Go per creare ed eliminare cluster, eseguire processi ed elencare gli utenti degli account. Questi esempi di codice usano databricks SDK per il processo di autenticazione predefinito di Azure Databricks di Go.
Per altri esempi di codice, vedere la cartella examples nel repository Databricks SDK for Go in GitHub.
- Creare un cluster
- Eliminare in modo definitivo un cluster
- Eseguire un processo
- Gestisce i file nei volumi nel catalogo Unity
- Elencare gli utenti dell'account
Creare un cluster
Questo esempio di codice crea un cluster con la versione più recente disponibile di Databricks Runtime Long Term Support (LTS) e il tipo di nodo del cluster più piccolo disponibile con un disco locale. Questo cluster ha un ruolo di lavoro e il cluster terminerà automaticamente dopo 15 minuti di inattività. La CreateAndWait chiamata al metodo fa sì che il codice venga sospeso fino a quando il nuovo cluster non viene eseguito nell'area di lavoro.
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
}
Eliminare in modo definitivo un cluster
Questo esempio di codice elimina definitivamente il cluster con l'ID cluster specificato dall'area di lavoro.
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)
}
}
Eseguire un processo
Questo esempio di codice crea un processo di Azure Databricks che esegue il notebook specificato nel cluster specificato. Durante l'esecuzione del codice, il programma ottiene dall'utente tramite il terminale il percorso del notebook esistente, l'ID del cluster esistente e le impostazioni del lavoro correlate. La RunNowAndWait chiamata al metodo causa la sospensione del codice fino al termine dell'esecuzione del nuovo processo nell'area di lavoro.
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)
}
Gestisce i file nei volumi nel catalogo Unity
Questo esempio di codice illustra varie chiamate alle funzionalità filesall'interno di WorkspaceClient per accedere a un volume del catalogo Unity.
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,
},
)
}
Elencare gli utenti dell'account
Questo esempio di codice elenca gli utenti disponibili all'interno di un account Azure Databricks.
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)
}
}
Risoluzione dei problemi
Questa sezione descrive le soluzioni ai problemi comuni relativi a Databricks SDK per Go.
Per segnalare problemi o altri commenti e suggerimenti, creare un problema di GitHub per Databricks SDK per Go.
Errore: Impossibile analizzare la risposta
Se viene visualizzato l'errore seguente quando si tenta di usare Databricks SDK for Go, indica quasi sempre un problema con la configurazione di autenticazione.
Error: unable to parse response. This is likely a bug in the Databricks SDK for Go or the underlying REST API.
Se si verifica questo errore, verificare quanto segue:
- Verificare che l'host Databricks sia impostato correttamente.
- Verificare che il metodo di autenticazione disponga delle autorizzazioni necessarie per l'operazione API che si sta tentando di eseguire.
- Se si è protetti da un firewall aziendale, assicurarsi che non blocchi o reindirizzi il traffico dell'API.
Una causa comune di questo errore è il collegamento privato che reindirizza l'SDK a una pagina di accesso, che l'SDK non può elaborare. Ciò si verifica in genere quando si tenta di accedere a un'area di lavoro abilitata per il collegamento privato configurata senza accesso a Internet pubblico da una rete diversa da quella a cui appartiene l'endpoint VPC.
Per altri dettagli, vedere:
Risorse aggiuntive
Per altre informazioni, vedi:
- Databricks SDK per Go README
- Informazioni di riferimento su Databricks SDK per l'API Go
- Esempi di codice aggiuntivi
- Registrazione
- Test
- Operazioni a esecuzione prolungata
- Risposte impaginate