Пакет SDK Databricks для Go
В этой статье вы узнаете, как автоматизировать операции Azure Databricks и ускорить разработку с помощью пакета SDK Databricks для Go. Эта статья дополняет пакет SDK Databricks для Go README, справочник по API и примеры.
Примечание.
Эта функция доступна в бета-версии и подходит для использования в рабочей среде.
В период бета-версии Databricks рекомендует закрепить зависимость от конкретной дополнительной версии пакета SDK Databricks для Go, от которой зависит код, например, в файле проекта go.mod
. Дополнительные сведения о закреплении зависимостей см. в разделе "Управление зависимостями".
Подготовка к работе
Прежде чем приступить к использованию пакета SDK Databricks для Go, компьютер разработки должен иметь следующее:
- Установите go.
- Настроена проверка подлинности Azure Databricks.
Get начало работы с пакетом SDK Databricks для Go
На компьютере разработки с помощью Go уже
go mod init
например:go mod init sample
Зависимость от пакета SDK Databricks для Go, выполнив
go mod edit -require
команду, заменив0.8.0
последнюю версию пакета SDK Databricks для Go, как указано в файле CHANGELOG:go mod edit -require github.com/databricks/databricks-sdk-go@v0.8.0
Теперь файл
go.mod
должен выглядеть так:module sample go 1.18 require github.com/databricks/databricks-sdk-go v0.8.0
В проекте создайте файл кода Go, который импортирует пакет SDK Databricks для Go. В следующем примере в файле
main.go
со следующим содержимым перечислены все кластеры в рабочей области 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) } }
Добавьте все отсутствующие зависимости модуля, выполнив
go mod tidy
команду:go mod tidy
Примечание.
Если у вас ошибка
go: warning: "all" matched no packages
в get, вы забыли добавить файл с кодом на языке Go, который импортирует пакет SDK Databricks для Go.Захват копий всех пакетов, необходимых для поддержки сборок и тестов пакетов в
main
модулеgo mod vendor
, выполнив команду:go mod vendor
Set компьютер разработки для Azure Databricks проверки подлинности.
Запустите файл кода Go, если файл с именем
main.go
, выполнивgo run
команду:go run main.go
Примечание.
Не устанавливая
*databricks.Config
в качестве аргумента в предыдущем вызовеw := databricks.Must(databricks.NewWorkspaceClient())
, пакет SDK Databricks для Go использует свой процесс по умолчанию для проверки подлинности Azure Databricks. Чтобы переопределить это поведение по умолчанию, ознакомьтесь с проверкой подлинности пакета SDK Databricks для Go с помощью учетной записи Azure Databricks или рабочей области.
Update пакет SDK Databricks для Go
Чтобы update проект Go использовал один из пакетов SDK Databricks для Go, как указано в CHANGELOG, сделайте следующее:
Выполните команду
go get
из корневого каталога вашего проекта, указав флаг-u
для выполнения update, а также предоставьте имя и номер целевой версии пакета Databricks SDK для Go. Например, чтобы перейти к версии0.12.0
от update, выполните следующую команду:go get -u github.com/databricks/databricks-sdk-go@v0.12.0
Добавьте все отсутствующие и устаревшие зависимости модуля, выполнив команду
go mod tidy
: update.go mod tidy
Захват копий всех новых и обновленных пакетов, необходимых для поддержки сборок и тестов пакетов в
main
модулеgo mod vendor
, выполнив команду:go mod vendor
Проверка подлинности пакета SDK Databricks для Go с помощью учетной записи Или рабочей области Azure Databricks
Пакет SDK Databricks для Go реализует стандарт унифицированной проверки подлинности клиента Databricks, консолидированный и согласованный архитектурный и программный подход к проверке подлинности. Этот подход помогает настроить и автоматизировать проверку подлинности с помощью Azure Databricks более централизованным и предсказуемым. Он позволяет настроить проверку подлинности Databricks один раз, а затем использовать эту конфигурацию в нескольких средствах Databricks и пакетах SDK без дальнейших изменений конфигурации проверки подлинности. Дополнительные сведения, включая более полные примеры кода в Go, см. в статье Databricks client unified authentication.
Некоторые из доступных шаблонов кода для инициализации проверки подлинности Databricks с помощью пакета SDK Databricks для Go включают:
Используйте проверку подлинности databricks по умолчанию, выполнив одно из следующих действий:
- Создайте или определите пользовательский профиль конфигурации Databricks с обязательными полями для целевого типа проверки подлинности Databricks. Затем задайте переменной среды set значение для имени пользовательского профиля конфигурации
DATABRICKS_CONFIG_PROFILE
. - Set переменные среды, необходимые для целевого типа аутентификации Databricks.
Затем создайте экземпляр объекта с проверкой
WorkspaceClient
подлинности databricks по умолчанию следующим образом:import ( "github.com/databricks/databricks-sdk-go" ) // ... w := databricks.Must(databricks.NewWorkspaceClient())
- Создайте или определите пользовательский профиль конфигурации Databricks с обязательными полями для целевого типа проверки подлинности Databricks. Затем задайте переменной среды set значение для имени пользовательского профиля конфигурации
Жесткое кодирование обязательных полей поддерживается, но не рекомендуется, так как он рискует предоставлять конфиденциальную информацию в коде, например личные маркеры доступа Azure Databricks. В следующем примере жестко кодируются хост Azure Databricks и токен доступа values для аутентификации через токен 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: "...", }))
См. также проверку подлинности в пакете SDK Databricks для Go README.
Примеры
В следующих примерах кода показано, как использовать пакет SDK Databricks для Go для создания и удаления кластеров, выполнения заданий и list пользователей учетной записи. В этих примерах кода используется пакет SDK Databricks для процесса проверки подлинности Azure Databricks по умолчанию.
Дополнительные примеры кода см . в папке примеров в репозитории Databricks SDK для Go в GitHub.
- Создание кластера
- Окончательное удаление кластера
- Запуск задания
- Управление файлами в Unity Catalogvolumes
- List пользователи аккаунта
Создание кластера
В этом примере кода создается кластер с последней доступной версией Databricks Runtime Long Term Support (LTS) и наименьшим доступным типом узла кластера с локальным диском. Этот кластер имеет одну рабочую роль, и кластер будет автоматически завершаться через 15 минут времени простоя. Вызов CreateAndWait
метода приводит к приостановке кода до тех пор, пока новый кластер не будет запущен в рабочей области.
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
}
Окончательное удаление пользователя
Этот пример кода окончательно удаляет кластер с указанным идентификатором кластера из рабочей области.
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)
}
}
Выполнение задания
В этом примере кода создается задание Azure Databricks, которое запускает указанную записную книжку в указанном кластере. По мере выполнения кода он получает путь к существующей записной книжке, существующий идентификатор кластера и связанные параметры задания от пользователя в терминале. Вызов RunNowAndWait
метода приводит к приостановке кода, пока новое задание не завершит работу в рабочей области.
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 Catalogvolumes
В этом примере кода показаны различные вызовы функций files
в WorkspaceClient
для доступа к Catalogтома 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,
},
)
}
пользователи учетной записи List
В этом примере кода перечислены доступные пользователи в учетной записи 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)
}
}
Дополнительные ресурсы
Дополнительные сведения см. в разделе:
- Пакет SDK Databricks для Go README
- Справочник по API Databricks для Go
- Дополнительные примеры кода
- Ведение журнала
- Тестирование
- Длительные операции
- Ответы с разбивкой на страницы