dbx by Databricks Labs (英語)
このドキュメントは廃止されており、更新されない可能性があります。
Databricks では、Databricks Labs が dbx する代わりに、Databricks アセット バンドルを使用することをお勧めします。 「Databricks アセットバンドルとは」および「dbx からバンドルへの移行」を参照してください。
この記事では、現状のまま提供されており、顧客技術サポートチャネルを通じたDatabricksのサポートが提供されていない、Databricks Labsの dbx について説明します。ご質問や機能リクエストは、GitHub上のdatabrickslabs/dbxリポジトリの「問題」ページからお問い合わせください。
dbx byDatabricks Labs は、従来のDatabricks コマンドライン インターフェイスDatabricksCLI () を拡張し、 プラットフォーム上での迅速な開発ライフサイクルと継続的インテグレーションと継続的デリバリー/デプロイ () の機能を提供するように設計されたオープンソースCI/CD Databricksツールです。
dbx 複数の環境で のジョブ の立ち上げとデプロイのプロセスを簡素化します。 また、プロジェクトをパッケージ化し、バージョン管理された方法で Databricks 環境に配信するのにも役立ちます。 CLIファーストの方法で設計されており、パイプラインCI/CD内とローカル ツールの一部 (Visual Studio Code や Visual Studio Code や Visual Studio IDEsPyCharmなど) の一部としてアクティブに使用できるように構築されています。
dbx を使用した一般的な開発ワークフローは以下のとおりです。
-
Databricks がサポートする Git プロバイダー を使用してリモート リポジトリを作成します (使用可能なリモート リポジトリがまだない場合は)。
-
リモート リポジトリを Databricks ワークスペースに複製します。
-
Databricks ノートブックを作成するか、Databricks ワークスペースの複製されたリポジトリに移動します。 このノートブックを使用して、 Databricks クラスター で実行するコードのプロトタイプ作成を開始します。
-
個別のヘルパークラスと関数、構成ファイル、テストを追加してノートブックコードを強化およびモジュール化するには、
dbx、任意のIDE、およびGitがインストールされたローカル開発マシンの使用に切り替えます。 -
リモートリポジトリのクローンをローカル開発コンピューターに作成します。
-
コードをノートブックから1つ以上のローカルコードファイルに移動します。
-
ローカルでコーディングするときは、ローカル リポジトリからリモート リポジトリに作業をプッシュします。 また、リモート リポジトリを Databricks ワークスペース と同期 します。
または、 dbx sync を使用して、ローカル ファイルの変更をワークスペース内の対応するファイルとリアルタイムで自動的に同期することもできます。
-
迅速なプロトタイピングを行うためには、Databricksワークスペースでのノートブックの使用と、検証済みのコードのノートブックからローカルマシンへの移動を行い続けてください。コードのモジュール化、コード補完、lint、単体テスト、Databricksへのライブ接続を必要としないコードとオブジェクトのステップスルーデバッグなどのタスクには、ローカルIDEを引き続き使用します。
-
必要に応じて、
dbxを使用して、ターゲットクラスターでローカルコードをバッチ実行します。 (これは、Sparkのbinディレクトリで spark-submit スクリプトを実行して、Spark クラスターでアプリケーションを起動するのと似ています。 -
本番運用の準備ができたら、CI/CD GitHub Actions、 、 などのAzureDevOps GitLabプラットフォームを使用して、クラスターでのリモート リポジトリのコードの実行を自動化します。
必要条件
dbx を使用するには、コードがPython、Scala、Javaのいずれを使用しているかに関わらず、ローカルの開発マシンに以下をインストールしておく必要があります。
-
Python:バージョン3.8以降
コードで Pythonを使用している場合は、ターゲット クラスターにインストールされているバージョンと一致するバージョンの Python を使用する必要があります。 既存のクラスターにインストールされている Python のバージョンを取得するには、クラスターの Webターミナル を使用して
python --versionコマンドを実行します。 Databricks Runtimeリリースノートバージョンの「システム環境」セクションと、ターゲットクラスターのDatabricks Runtimeバージョンの互換性も参照してください。 -
コードでPythonを使用している場合に、Python仮想環境を作成して
dbxプロジェクト内で正しいバージョンのPythonとパッケージの依存関係を使用していることを確認する方法です。この記事では、Pipenvについて説明します。 -
dbx バージョン 0.8.0 以降。 このパッケージは、Python Package Index (PyPI) から
pip install dbxを実行してインストールできます。dbxがインストールされていることを確認するには、以下のコマンドを実行します。Bashdbx --versionバージョン番号が返された場合は、
dbxがインストールされています。バージョン番号が0.8.0未満の場合は、次のコマンドを実行して
dbxをアップグレードし、バージョン番号を再度確認します。Bashpip install dbx --upgrade
dbx --version
# Or ...
python -m pip install dbx --upgrade
dbx --version -
Databricks CLI バージョン 0.18 以下で、認証を使用して設定されています。従来の Databricks CLI (Databricks CLI バージョン 0.17) は、
dbx. この認証は、ローカル開発マシンの次の場所のいずれかまたは両方で設定できます。DATABRICKS_HOSTおよびDATABRICKS_TOKENの環境変数内(従来の Databricks CLI バージョン0.8.0以降).databrickscfgファイル内の Databricks 構成プロファイル。
dbxは、これら2つの各ロケーションで認証資格情報を検索します。dbxは、一致する資格情報で最初に見つかったもののみを使用します。
dbx .netrc の使用はサポートされていません 認証用のファイルで、従来の Databricks CLI バージョン 0.17.2 以降です。 インストールされている従来の Databricks CLI のバージョンを確認するには、コマンド databricks --versionを実行します。
- ローカルとリモートのコード変更をプッシュして同期するためのgit
次のいずれかのIDEの手順に進みます。
Databricks は、dbx で前の IDEs の使用を検証しました。ただし、dbxは任意の IDE で動作する必要があります。 IDEなし(端末のみ)を使用することもできます。
dbx は、単一ファイルの Python コード ファイルとコンパイル済みの Scala および Java JAR ファイルで動作するように最適化されています。 dbx は、単一ファイルの R コード ファイルまたはコンパイル済みの R コード パッケージでは機能しません。 これは、 がdbx API2.0 および2.1API のジョブ 連携し、これらの 単一ファイルの R コード ファイルまたはコンパイル済みの R コード パッケージをジョブとして実行できないためです。
Visual Studio Code
Visual Studio Code と Python with dbxの使用を開始するには、次の手順を実行します。
ローカル開発マシンには、一般的な 要件に加えて、次のものがインストールされている必要があります。
-
Visual Studio CodeのPython拡張機能: 詳細については、Visual Studio Codeウェブサイトの拡張機能マーケットプレイスを参照してください。
詳細については、Visual Studio Codeドキュメントの「VS CodeでPythonを開始する」を参照してください。
以下のステップに従い、dbx プロジェクト構造の設定を開始してください。
-
ターミナルから、空白のフォルダを作成します。これらの手順では、
dbx-demoという名前のフォルダを使用します。dbxプロジェクトのルートフォルダには、任意の名前を付けることができます。別の名前を使用する場合は、これらの手順全体で名前を置き換えます。フォルダーを作成したら、そのフォルダーに切り替えて、そのフォルダーから Visual Studio Code を起動します。LinuxまたはmacOSの場合:
Bashmkdir dbx-demo
cd dbx-demo
code .
code . を実行した後に command not found: code が表示された場合は、Microsoftウェブサイトの「コマンドラインからの起動」を参照してください。
Windowsの場合:
md dbx-demo
cd dbx-demo
code .
-
Visual Studio Codeで、このプロジェクト用のPython仮想環境を作成します。
-
メニューバーで、 [表示] > [ターミナル] をクリックします。
-
dbx-demoフォルダのルートから、次のオプションを指定してpipenvコマンドを実行します。ここで、<version>は、ローカルに既にインストールされている Python のターゲット バージョン (理想的には、ターゲット クラスターのバージョンと一致する Python)3.8.14.Bashpipenv --python <version>次のステップで必要になるため、
pipenvコマンドの出力にあるVirtualenv locationの値をメモしておきます。
-
-
ターゲットのPythonインタープリターを選択し、Python仮想環境をアクティブ化します。
- メニューバーで [表示] > [コマンドパレット] をクリックし、
Python: Selectと入力して [Python:インタープリターの選択] をクリックします。 - 作成したばかりのPython仮想環境へのパス内でPythonインタープリターを選択します。(このパスは、
pipenvコマンドの出力にVirtualenv location値としてリストされます。) - メニューバーで、 [ビュー] > [コマンドパレット] をクリックし、
Terminal: Createと入力して [ターミナル:新しいターミナルの作成] をクリックします。
詳しくはVisual Studio Codeドキュメントの「VS CodeにおけるPython環境の使用」を参照してください。
- メニューバーで [表示] > [コマンドパレット] をクリックし、
-
「dbx プロジェクトの作成」に進みます。
PyCharm
PyCharm と Python を dbxで使用を開始するには、次の手順を実行します。
ローカル開発マシンには、一般的な要件 に加えてPyCharm がインストールされている必要があります。
以下のステップに従い、dbx プロジェクト構造の設定を開始してください。
- PyCharmのメニューバーで、 [ファイル] > [新しいプロジェクト] をクリックします。
- [プロジェクトの作成] ダイアログで、新しいプロジェクトのロケーションを選択します。
- Pythonインタープリター:新しいPipenv環境 を開きます。
- まだ選択されていない場合は 新しい環境 を選択し、ドロップダウンリストから Pipenv を選択します。
- [Base interpreter ] で、ローカルに既にインストールされているターゲットバージョンの Python の Python インタープリタが含まれている場所を選択します (また、ターゲットクラスターのバージョンと一致するバージョンが理想的ですPython)。
- Pipenv実行可能ファイル の場合、まだ自動検出されていない場合は、ローカルにインストールされた
pipenvが含まれるロケーションを選択します。 - 最小限の
dbxプロジェクトを作成し、その最小限のdbxプロジェクトでmain.pyファイルを使用したい場合は、 [main.py welcomeスクリプトを作成] ボックスを選択します。それ以外の場合は、このチェックボックスをオフにします。 - 作成 をクリックします。
- プロジェクト ツール ウィンドウで、プロジェクトのルート フォルダーを右クリックし、[ > ターミナルで開く ] をクリックします。
- 「dbx プロジェクトの作成」に進みます。
IntelliJ IDEAの
IntelliJ IDEA と Scala を dbxで使用を開始するには、次の手順を実行します。これらの手順では、 dbx プロジェクトを開始するために使用できる最小限の sbt ベースの Scala プロジェクトを作成します。
ローカル開発マシンには、一般的な 要件に加えて、次のものがインストールされている必要があります。
- IntelliJ IDEA
- IntelliJ IDEA用のScalaプラグイン:詳細については、IntelliJ IDEAドキュメントの「ScalaでのIntelliJ IDEAの活用」を参照してください。
- Java Runtime環境(JRE)8:JRE 8のどのエディションでも動作するはずですが、現時点でDatabricksがOpenJDK 8 JREでの使用を検証済みなのは
dbxとIntelliJ IDEAのみです。Databricksは、IntelliJ IDEAおよびJava 11でのdbxの使用をまだ検証していません。詳細については、IntelliJ IDEAドキュメントの「Java開発キット(JDK)」を参照してください。
以下のステップに従い、dbx プロジェクト構造の設定を開始してください。
ステップ 1: sbt-based の Scala プロジェクトを作成する
- IntelliJ IDEAで、ビューの種類に応じて、 [プロジェクト] > [新しいプロジェクト] または [ファイル] > [新規] > [プロジェクト] をクリックします。
- [新しいプロジェクト] ダイアログで、 [Scala] 、 [sbt] 、 [次へ] の順にクリックします。
- プロジェクト名とプロジェクトのロケーションを入力します。
- JDK の場合は、OpenJDK 8 JREのインストールを選択します。
- sbt の場合は、記載されている
sbtの利用可能な最新バージョンを選択します。 - Scala については、ターゲット クラスターのバージョンと一致する Scala のバージョンを選択するのが理想的ですScala。Databricks Runtimeリリースノートのバージョンの「システム環境」のセクションと、対象のクラスターのDatabricks Runtimeバージョンとの互換性を参照してください。
- [Scala] の横にある [ソース] ボックスがまだ選択されていない場合は選択します。
- パッケージのプレフィックスを [パッケージプレフィックス] に追加します。これらの手順では、パッケージのプレフィックスとして
com.example.demoを使用します。別のパッケージプレフィックスを指定する場合は、これらの手順全体でパッケージプレフィックスを置き換えてください。 - [完了] をクリックします。
ステップ 2: パッケージにオブジェクトを追加する
パッケージに必要なオブジェクトを追加することができます。このパッケージには、SampleApp という名前の単一のオブジェクトが含まれています。
-
[プロジェクト] ツールウィンドウ( [ビュー] >[ツールウィンドウ] > [プロジェクト] )で、 [プロジェクト名] > [src] > [メイン] > [Scala] フォルダを右クリックし、 [新規作成] > [Scalaクラス] をクリックします。
-
[ オブジェクト ] を選択し、オブジェクトの名前を入力して Enter キーを押します。たとえば、「
SampleApp」と入力します。ここで別のオブジェクト名を入力する場合は、これらの手順全体で名前を置き換えてください。 -
SampleApp.scalaファイルの内容を以下のコードに置き換えます。Scalapackage com.example.demo
object SampleApp {
def main(args: Array[String]) {
}
}
ステップ 3: プロジェクトをビルドする
プロジェクトのビルド設定と依存関係で必要とされるものをプロジェクトに追加します。このステップは、前のステップで設定されたプロジェクトをビルドしており、次のライブラリのみに依存していることを前提としています。
-
プロジェクトの
build.sbtファイルの内容を次の内容で置き換えます。ScalaThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / scalaVersion := "2.12.14"
val sparkVersion = "3.2.1"
lazy val root = (project in file("."))
.settings(
name := "dbx-demo",
idePackagePrefix := Some("com.example.demo"),
libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion withSources(),
libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion withSources(),
libraryDependencies += "org.apache.spark" %% "spark-hive" % sparkVersion withSources()
)上記のファイルで、以下の通り置き換えます。
2.12.14を、このプロジェクト用に以前に選択したScalaのバージョンに置き換えます。3.2.1を、このプロジェクト用に以前に選択したSparkのバージョンに置き換えます。dbx-demoを、プロジェクトの名前に置き換えます。com.example.demoを、パッケージプレフィックスの名前に置き換えます。
-
メニューバーで、 [ビュー] > [ツールウィンドウ] > [sbt] をクリックします。
-
sbt ツールウィンドウで、プロジェクトの名前を右クリックし、 Reload sbt Project をクリックする。
sbtのバージョンに応じて、デフォルトで Coursier や Ivy などのインターネットアーティファクトストアからプロジェクトの依存関係のダウンロードが完了するまで待ちますsbt。ステータスバーでダウンロードの進行状況を確認できます。このプロジェクトにさらに依存関係を追加または変更する場合は、追加または変更する依存関係のセットごとに、このプロジェクトの再読み込み手順を繰り返す必要があります。 -
メニューバーで、 [IntelliJ IDEA] > [環境設定] をクリックします。
-
[環境設定] ダイアログで、 [ビルド、実行、デプロイメント] > [ビルドツール] > [sbt] をクリックします。
-
[JVM] で、 [JRE] に対しOpenJDK 8 JREのインストールを選択します。
-
[sbtプロジェクト] でプロジェクトの名前を選択します。
-
[sbtシェル] で ビルドを選択します。
-
「 OK 」をクリックします。
-
メニュー バーで、[ビルド] > [プロジェクトのビルド ] をクリックします。ビルドの結果は sbt シェル ツールウィンドウ ( View > Tool Windows > sbt シェル ) に表示される。
ステップ 4: プロジェクトにコードを追加する
必要なコードをプロジェクトに追加します。このステップでは、example パッケージ内の SampleApp.scala ファイルにコードのみを追加することを前提としています。
プロジェクトの src > main > scala > SampleApp.scala ファイルに、ターゲット クラスターでバッチ実行 dbx コードを追加します。 基本的なテストには、「 コード例」セクションの Scala コードの例を使用します。
ステップ 5: プロジェクトを実行する
- メニューバーで、 [実行] > [構成の編集] をクリックします。
- [構成を実行/デバッグする] ダイアログで、 + ( [新しい構成を追加する] )アイコン、 [新規追加] 、または [新しい実行構成を追加する] をクリックします。
- ドロップダウンで、 [sbt タスク] をクリックします。
- [名前] に、構成の名前を入力します。(例: [プログラムの実行])
- [タスク] に、
~runと入力します。 - [sbtシェルを使用する] を選択します。
- 「 OK 」をクリックします。
- メニューバーで、[実行] > [プログラムの実行] をクリックします。 実行の結果が sbt シェル ツールウィンドウに表示される。
ステップ 6: プロジェクトを JAR としてビルドする
プロジェクトに、好きなJARビルド設定を追加することができます。このステップは、前のステップで設定されたプロジェクトに基づいたJARのみをビルドすることを前提としています。
- メニューバーで、 [ファイル] > [プロジェクトの構造] をクリックします。
- [ プロジェクトの構造 ]ダイアログで、 [プロジェクトの設定] > [アーティファクト] 」をクリックします。
- + ( [追加] )アイコンをクリックします。
- ドロップダウンリストで、 [JAR] > [依存関係のあるモジュールから] を選択します。
- [モジュールからJARを作成] ダイアログの [モジュール] で、プロジェクトの名前を選択します。
- [メインクラス] の場合は、フォルダアイコンをクリックします。
- [メインクラスの選択] ダイアログの [名前で検索] タブで、 [SampleApp] を選択し、 [OK] をクリックします。
- [ライブラリからのJAR ファイル] の場合は、 [出力ディレクトリへのコピーを選択し、マニフェスト経由でリンクする] を選びます。
- [OK] をクリックして [モジュールからJARを作成] ダイアログを閉じます。
- [OK] をクリックして [プロジェクトの構造] ダイアログを閉じます。
- メニューバーで、 [ビルド] > [アーティファクトのビルド] をクリックします。
- 表示されるコンテキストメニューで、 project-name を選択します >ビルド。
sbtが JAR をビルドする間、お待ちください。ビルドの結果は、 ビルド出力 ツール ウィンドウ ( [表示] > [ツール] Windows > [ビルド]) に表示されます。
JAR は、プロジェクトの out > artifacts > <project-name>_jar フォルダにビルドされます。JARの名前は <project-name>.jarです。
ステップ7:IDEでターミナルを表示する
dbx プロジェクト構造が仕上げり、 dbx プロジェクトを作成する準備が整いました。
メニューIntelliJ IDEA バーの[表示] > [ツール]Windows > [ターミナル] をクリックして ターミナルを表示し、「dbx プロジェクトの作成 」に進みます。
Eclipse
Eclipse と Java を Java で使用を開始するには、次の手順を完了dbx。これらの手順では、 dbx プロジェクトの開始に使用できる最小限の Maven ベースの Java プロジェクトを作成します。
ローカル開発マシンには、一般的な 要件に加えて、次のものがインストールされている必要があります。
- Eclipseのバージョンです。これらの手順では、Eclipse IDE for Java Developersエディションの Eclipse IDEを使用します。
- Java Runtime Environment (JRE) または Java Development Kit (JDK) 11 のエディション (ローカル マシンのオペレーティング システムによって異なります)。JRE または JDK 11 のどのエディションでも動作するはずですが、Databricks はこれまで、AdoptOpenJDK 11 を含む Eclipse 2022-03 R で Java 開発者向けの Java 開発者向けの
dbxと Eclipse IDE の使用を検証しただけです。
以下のステップに従い、dbx プロジェクト構造の設定を開始してください。
ステップ 1: Maven ベースの Java プロジェクトを作成する
- Eclipseで、 [ファイル] > [新規] > [プロジェクト] をクリックします。
- [新規プロジェクト] ダイアログで、 [Maven] を展開し、 [Mavenプロジェクト] を選択して [次へ] をクリックします。
- [新規Mavenプロジェクト] ダイアログで [簡易プロジェクトを作成する (アーキタイプの選択をスキップ)] を選択し、 [次へ] をクリックします。
- 「グループ ID 」には、Javaのパッケージ名ルールに準拠したグループ ID を入力します。これらの手順では、パッケージ名に
com.example.demoを使用します。別のグループ ID を入力する場合は、これらの手順全体でその ID を置き換えます。 - [アーティファクトId] には、JARファイルの名前からバージョン番号を除いたものを入力します。これらの手順では、
dbx-demoというJAR名を使用します。JARファイルに別の名前を入力した場合は、以下の手順全体でその名前に置き換えてください。 - [完了] をクリックします。
ステップ 2: パッケージにクラスを追加する
パッケージには好きなクラスを追加できます。このパッケージには、SampleAppという名前の単一のクラスが含まれます。
- 「プロジェクト・エクスプローラー 」ビュー ( 「ウィンドウ」>「ビューの表示」>プロジェクト・エクスプローラー ) で、 プロジェクト名の プロジェクト・アイコンを選択し、「 ファイル」>「新規>クラス 」をクリックします。
- [新規Javaクラス] ダイアログの [パッケージ] に、
com.example.demoと入力します。 - [名前] に
SampleAppと入力します。 - [修飾子] で、 [public] を選択します。
- [スーパークラス] 空白のままにします。
- [どのメソッドのStubを作成しますか] では、 public static void Main(String[] args) を選択してください。
- [完了] をクリックします。
ステップ 3: プロジェクトに依存関係を追加する
-
[プロジェクトエクスプローラー] ビューで、 project-name > pom.xml をダブルクリックします。
-
次の依存関係を
<project>要素の子要素として追加し、ファイルを保存します。XML<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>3.2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>以下のように置き換えてください。
2.12ターゲットクラスターの Scalaバージョンで。3.2.1ターゲットクラスターの Sparkバージョンで。
Databricks Runtimeリリースノートのバージョンの「システム環境」のセクションと、対象のクラスターのDatabricks Runtimeバージョンとの互換性を参照してください。
ステップ 4: プロジェクトをコンパイルする
-
プロジェクトの
pom.xmlファイルに、次の Maven コンパイラ プロパティを<project>要素の子要素として追加し、ファイルを保存します。XML<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties> -
「Project Explorer 」ビューで、 プロジェクト名の プロジェクト・アイコンを右クリックし、「 Run」> 「Run 」をクリックします。
-
[実行構成] ダイアログで、 [Mavenビルド] をクリックします。
-
[新しい起動構成] のアイコンをクリックします。
-
この起動構成の名前を入力します。(例: clean compile )
-
[ ベースディレクトリ ] で [ ワークスペース ] をクリックし、プロジェクトのディレクトリを選択して [OK] をクリックします。
-
[目標] に、
clean compileと入力します。 -
「実行 」をクリックします。実行の出力は、 コンソール ビュー ( コンソールのウィンドウ > ビューの表示> ) に表示されます。
ステップ 5: プロジェクトにコードを追加する
プロジェクトには好きなコードを追加できます。このステップでは、com.example.demo という名前のパッケージの SampleApp.java という名前のファイルにコードのみを追加することを前提としています。
プロジェクトの src/main/java > com.example.demo > SampleApp.java ファイルに、ターゲット クラスターでバッチ実行 dbx コードを追加します。 (手元にコードがない場合は、この記事の最後にある コード例の Java コードを使用できます。
ステップ 6: プロジェクトを実行する
- 「Project Explorer 」ビューで、 プロジェクト名の プロジェクト・アイコンを右クリックし、「 Run」> 「Run 」をクリックします。
- [実行構成] ダイアログで、 [Java アプリケーション] を開き、 [アプリ] をクリックします。
- 「実行 」をクリックします。実行の出力が [Console ] ビューに表示されます。
ステップ 7: プロジェクトを JAR としてビルドする
- 「Project Explorer 」ビューで、 プロジェクト名の プロジェクト・アイコンを右クリックし、「 Run」> 「Run 」をクリックします。
- [実行構成] ダイアログで、 [Mavenビルド] をクリックします。
- [新しい起動構成] のアイコンをクリックします。
- この起動構成の名前を入力します。(例: clean package )
- [ ベースディレクトリ ] で [ ワークスペース ] をクリックし、プロジェクトのディレクトリを選択して [OK] をクリックします。
- [目標] に、
clean packageと入力します。 - 「実行 」をクリックします。実行の出力が [Console ] ビューに表示されます。
JAR は <project-name> > target フォルダに構築されます。JARの名前は <project-name>-0.0.1-SNAPSHOT.jarです。
最初にJARが [プロジェクトエクスプローラー] ウィンドウの target フォルダに表示されない場合は、 project-name のプロジェクトアイコンを右クリックし、 [更新] をクリックしてJARが表示されるか試してみてください。
ステップ8:IDEでターミナルを表示する
dbx プロジェクト構造が仕上がり、 dbx プロジェクトを作成する準備が整いました。まず始めに、 [プロジェクトエクスプローラー] のビューを以下のように設定し、 dbx が生成する非表示のファイル(ドット(./)で始まるファイル)を表示します。
- [プロジェクトエクスプローラー] のビューで、省略記号( [メニューを表示] )フィルターアイコンをクリックし、 [フィルターとカスタマイズ] をクリックします。
- [フィルターとカスタマイズ] ダイアログの [プリセットフィルター] タブで、 .* resources ボックスをオフにします。
- 「 OK 」をクリックします。
次に、Eclipseターミナルを以下のようにして表示します。
- メニューバーで、 [ウィンドウ] > [ビューの表示] > [ターミナル] の順にクリックします。
- ターミナルのコマンドプロンプトが表示されない場合は、[ ターミナル ]ビューで[ ターミナルを開く ]アイコンをクリックします。
cdコマンドを使用して、プロジェクトのルートディレクトリに切り替えます。- 「dbx プロジェクトの作成」に進みます。
IDEなし(端末のみ)
dbx でターミナルとPythonの使用を開始するには、以下の手順を実行します。
次の手順に従い、ターミナルを使用して dbx プロジェクト構造のセットアップを開始します。
-
ターミナルから、空白のフォルダを作成します。これらの手順では、
dbx-demoという名前のフォルダーを使用します (ただし、dbxプロジェクトのルート フォルダーには任意の名前を付けることができます)。フォルダを作成したら、そのフォルダに切り替えます。LinuxまたはmacOSの場合:
Bashmkdir dbx-demo
cd dbx-demoWindowsの場合:
PowerShellmd dbx-demo
cd dbx-demo -
次のオプションを指定して、
dbx-demoフォルダのルートからpipenvコマンドを実行し、このプロジェクトのPython仮想環境を作成します。ここでは、<version>はローカルに既にインストールされているPythonのターゲットバージョンです。(例:3.8.14)Bashpipenv --python <version> -
pipenv shellを実行して、Python仮想環境をアクティブ化します。Bashpipenv shell -
「dbx プロジェクトの作成」に進みます。
dbx プロジェクトの作成
前のセクションのいずれかで dbx プロジェクト構造を適切に配置したら、以下のプロジェクトタイプのいずれかを作成する準備が整いました。
- Python 用の最小限の dbx プロジェクトを作成する
- Scala または Java 用の最小限の dbx プロジェクトを作成する
- CI/CD サポートを使用した Python 用の dbx テンプレート プロジェクトの作成
Python 用の最小限の dbx プロジェクトを作成する
次の最小限の dbx プロジェクトは、Pythonと dbxを始めるための最も簡単で最速のアプローチです。 PythonDatabricksこれは、 Databricksワークスペース内の既存の 汎用クラスター 上で、単一の コードファイルのバッチ実行を示しています。
汎用クラスターとジョブ クラスター、リモート コード アーティファクト デプロイ、 プラットフォームのセットアップでのコードのバッチ実行を示す 用の テンプレート dbxプロジェクトを作成するには、 サポートを備えたPythonCI/CD の dbx テンプレート プロジェクトを作成するPythonCI/CDに進んでください。
この手順を完了するには、ワークスペースに既存の汎用クラスターが必要です。 ( View コンピュート または コンピュート設定リファレンスを参照してください。 理想的には (必須ではありませんが)、Python 仮想環境の Python のバージョンは、このクラスターにインストールされているバージョンと一致する必要があります。クラスター上の Python のバージョンを特定するには、クラスターの Webターミナル を使用してコマンド python --versionを実行します。
python --version
-
ターミナルから、
dbxプロジェクトのルートフォルダから、次のオプションを指定してdbx configureコマンドを実行します。このコマンドは、dbxプロジェクトのルート フォルダー内に非表示の.dbxフォルダーを作成します。この.dbxフォルダには、lock.jsonファイルとproject.jsonファイルが含まれています。Bashdbx configure --profile DEFAULT --environment default
project.json ファイルは、.databrickscfg ファイル内の DEFAULT プロファイルへの参照と共に、default という名前の環境を定義します。dbx別のプロファイルを使用する場合は、dbx configureコマンドで、--profile DEFAULTを--profileに置き換え、その後にターゲットプロファイルの名前を続けます。
たとえば、.databrickscfg ファイル内に DEV という名前のプロファイルがあり、 dbx で DEFAULT プロファイルの代わりにそれを使用したい場合、project.json ファイルは以下のようになります。この場合は dbx configure コマンド内の --environment dev に --environment default を置き換えることもできます。
{
"environments": {
"default": {
"profile": "DEFAULT",
"storage_type": "mlflow",
"properties": {
"workspace_directory": "/Workspace/Shared/dbx/projects/<current-folder-name>",
"artifact_location": "dbfs:/dbx/<current-folder-name>"
}
},
"dev": {
"profile": "DEV",
"storage_type": "mlflow",
"properties": {
"workspace_directory": "/Workspace/Shared/dbx/projects/<some-other-folder-name>",
"artifact_location": "dbfs:/dbx/<some-other-folder-name>"
}
}
}
}
dbx で、.databrickscfg ファイル内のプロファイルの代わりに DATABRICKS_HOST および DATABRICKS_TOKEN 環境変数を使用する場合は、 dbx configure コマンドから --profile オプションを完全に省略します。
-
dbxプロジェクトのルート フォルダ内にconfという名前のフォルダを作成します。LinuxまたはmacOSの場合:
Bashmkdir confWindowsの場合:
PowerShellmd conf -
以下の内容を含む
deployment.yamlファイルという名前のファイルをconfディレクトリに追加します。YAMLbuild:
no_build: true
environments:
default:
workflows:
- name: 'dbx-demo-job'
spark_python_task:
python_file: 'file://dbx-demo-job.py'
deployment.yaml ファイルには、.databrickscfg ファイル内の大文字の DEFAULT プロファイルへの参照である小文字の単語 defaultが含まれています。dbx別のプロファイルを使用する場合は、default をターゲット プロファイルの名前に置き換えます。
たとえば、.databrickscfg ファイル内に DEV という名前のプロファイルがあり、dbx で DEFAULT プロファイルの代わりにそれを使用したい場合、 deployment.yaml ファイルは以下のようになります。
environments:
default:
workflows:
- name: 'dbx-demo-job'
spark_python_task:
python_file: 'file://dbx-demo-job.py'
dev:
workflows:
- name: '<some-other-job-name>'
spark_python_task:
python_file: 'file://<some-other-filename>.py'
dbx で、 .databrickscfg ファイル内のプロファイルの代わりに DATABRICKS_HOST および DATABRICKS_TOKEN の環境変数を使用する場合は、 deployment.yaml 内の default をそのままにしておきます。dbx はデフォルトでこのリファレンスを使用します。
Spark構成のキーと値のペアをジョブに追加するには、以下のように spark_conf フィールドを使用します。
environments:
default:
workflows:
- name: 'dbx-demo-job'
spark_conf:
spark.speculation: true
spark.streaming.ui.retainedBatches: 5
spark.driver.extraJavaOptions: '-verbose:gc -XX:+PrintGCDetails'
# ...
ジョブに権限を追加するには、次のように access_control_list フィールドを使用します。以下に例を挙げます。
environments:
default:
workflows:
- name: 'dbx-demo-job'
access_control_list:
- user_name: 'someone@example.com'
permission_level: 'IS_OWNER'
- group_name: 'some-group'
permission_level: 'CAN_VIEW'
# ...
access_control_listフィールドは網羅的である必要があるため、ジョブの所有者をリストに追加し、他のユーザーとグループのアクセス許可を追加する必要があることに注意してください。
- クラスターで実行するコードを
dbx-demo-job.pyという名前のファイルに追加し、そのファイルをdbxプロジェクトのルート フォルダーに追加します。 (手元にコードがない場合は、この記事の最後にある コード例の Python コードを使用できます。
このファイルに dbx-demo-job.pyという名前を付ける必要はありません。別のファイル名を選択した場合は、conf/deployment.yaml ファイルに一致するように python_file フィールドを必ず更新してください。
-
次のオプションを指定してコマンド
dbx executeコマンドを実行します。このコマンドでは、<existing-cluster-id>をクラシックのIDに置き換えます コンピュート あなたの ワークスペース。 (IDを取得するには、 コンピュートリソースのURLとIDを参照してください。Bashdbx execute --cluster-id=<existing-cluster-id> dbx-demo-job --no-package -
実行の結果をローカルで表示するには、ターミナルの出力を参照してください。クラスターで実行結果を表示するには、クラスターの [ドライバー ログ ] タブの [標準出力 ] ウィンドウに移動します。( コンピュート ドライバーとワーカーのログを参照してください)。
-
「次のステップ」に進みます。
Scala または Java 用の最小限の dbx プロジェクトを作成する
次の最小限の dbx プロジェクトは、 dbx と Scala または Java を使い始めるための最も簡単で最速のアプローチです。 ScalaJavaJARこれは、1Databricks つの またはJAR Databricksを ワークスペースにデプロイし、そのデプロイされた をDatabricks ワークスペースの ジョブ クラスター で実行する方法を示しています。
Databricksは、クラスター上でScalaおよびJavaコードを実行する方法を制限しています。
- 単一のPythonファイルの場合とは異なり、単一のScalaまたはJavaファイルをクラスター上のジョブとして実行することはできません。ScalaまたはJavaコードを実行するには、まず目的のコードをJARにビルドする必要があります。
- JARは、既存の汎用クラスターのジョブとして実行できます。ただし、その JAR の更新プログラムを同じ汎用クラスターに再インストールすることはできません。 この場合は、代わりにジョブ クラスターを使用する必要があります。 このセクションでは、ジョブ クラスター アプローチを使用します。
- DatabricksワークスペースにデプロイされたJARをそのワークスペース内の汎用クラスターまたはジョブクラスターで実行する前に、まずJARをDatabricksワークスペースにデプロイする必要があります。
-
ターミナルで、プロジェクトのルートフォルダから、次のオプションを指定して
dbx configureコマンドを実行します。このコマンドは、プロジェクトのルートフォルダ内に非表示の.dbxフォルダを作成します。この.dbxフォルダには、lock.jsonファイルとproject.jsonファイルが含まれています。Bashdbx configure --profile DEFAULT --environment default
project.json ファイルは、.databrickscfg ファイル内の DEFAULT プロファイルへの参照と共に、default という名前の環境を定義します。dbx別のプロファイルを使用する場合は、dbx configureコマンドで、--profile DEFAULTを--profileに置き換え、その後にターゲットプロファイルの名前を続けます。
たとえば、.databrickscfg ファイル内に DEV という名前のプロファイルがあり、 dbx で DEFAULT プロファイルの代わりにそれを使用したい場合、project.json ファイルは以下のようになります。この場合は dbx configure コマンド内の --environment dev に --environment default を置き換えることもできます。
{
"environments": {
"default": {
"profile": "DEFAULT",
"storage_type": "mlflow",
"properties": {
"workspace_directory": "/Workspace/Shared/dbx/projects/<current-folder-name>",
"artifact_location": "dbfs:/dbx/<current-folder-name>"
}
},
"dev": {
"profile": "DEV",
"storage_type": "mlflow",
"properties": {
"workspace_directory": "/Workspace/Shared/dbx/projects/<some-other-folder-name>",
"artifact_location": "dbfs:/dbx/<some-other-folder-name>"
}
}
}
}
dbx で、.databrickscfg ファイル内のプロファイルの代わりに DATABRICKS_HOST および DATABRICKS_TOKEN 環境変数を使用する場合は、 dbx configure コマンドから --profile オプションを完全に省略します。
-
プロジェクトのルート フォルダ内に
confという名前のフォルダを作成します。LinuxまたはmacOSの場合:
Bashmkdir confWindowsの場合:
PowerShellmd conf -
以下の最小限の内容を含む、
deployment.yamlファイルという名前のファイルをconfディレクトリに追加します。YAMLbuild:
no_build: true
environments:
default:
workflows:
- name: 'dbx-demo-job'
new_cluster:
spark_version: '10.4.x-scala2.12'
node_type_id: 'i3.xlarge'
aws_attributes:
first_on_demand: 1
availability: 'SPOT'
num_workers: 2
instance_pool_id: 'my-instance-pool'
libraries:
- jar: 'file://out/artifacts/dbx_demo_jar/dbx-demo.jar'
spark_jar_task:
main_class_name: 'com.example.demo.SampleApp'以下のように置き換えてください。
spark_versionの値を、ターゲットジョブクラスターの適切なランタイムバージョンに置き換えます。- ターゲットジョブのクラスターに適したワーカーノードタイプを持つ
node_type_idの値。 instance_pool_idの値とワークスペース内の既存のインスタンスプールの ID を合わせ、ジョブの高速実行を可能にします。既存のインスタンス・プールが使用可能でない場合、またはインスタンス・プールを使用しない場合は、この行を完全に削除します。jarの値を、プロジェクト内のJARへのパスに置き換えます。Scalaを使用したIntelliJ IDEAの場合は、file://out/artifacts/dbx_demo_jar/dbx-demo.jarになる可能性があります。Javaを使用するEclipse IDEの場合、これはfile://target/dbx-demo-0.0.1-SNAPSHOT.jarになる可能性があります。- JAR内のメインクラスの名前を含む
main_class_nameの値(例:com.example.demo.SampleApp)
deployment.yaml ファイルには、「default」という単語が含まれています。これは、 .dbx/project.json ファイル内の default 環境へのリファレンスであり、さらに、 .databrickscfg ファイル内の DEFAULT プロファイルへのリファレンスとなります。dbx で別のプロファイルを使用する場合は、この deployment.yaml ファイル内の default を .dbx/project.json ファイル内の対応するリファレンスに置き換えます。これにより、.databrickscfg ファイル内の対応するプロファイルが参照されます。
たとえば、.databrickscfg ファイル内に DEV という名前のプロファイルがあり、dbx で DEFAULT プロファイルの代わりにそれを使用したい場合、 deployment.yaml ファイルは以下のようになります。
environments:
default:
workflows:
- name: 'dbx-demo-job'
# ...
dev:
workflows:
- name: '<some-other-job-name>'
# ...
dbx で、 .databrickscfg ファイル内のプロファイルの代わりに DATABRICKS_HOST および DATABRICKS_TOKEN の環境変数を使用する場合は、 deployment.yaml 内の default をそのままにしておきます。dbx はデフォルトで、 .dbx/project.json ファイル内の default 環境設定(profile 値を除く)を使用します。
Spark構成のキーと値のペアをジョブに追加するには、以下のように spark_conf フィールドを使用します。以下に例を挙げます。
environments:
default:
workflows:
- name: 'dbx-demo-job'
spark_conf:
spark.speculation: true
spark.streaming.ui.retainedBatches: 5
spark.driver.extraJavaOptions: '-verbose:gc -XX:+PrintGCDetails'
# ...
ジョブに権限を追加するには、次のように access_control_list フィールドを使用します。以下に例を挙げます。
environments:
default:
workflows:
- name: 'dbx-demo-job'
access_control_list:
- user_name: 'someone@example.com'
permission_level: 'IS_OWNER'
- group_name: 'some-group'
permission_level: 'CAN_VIEW'
# ...
access_control_listフィールドは網羅的である必要があるため、ジョブの所有者をリストに追加し、他のユーザーとグループのアクセス許可を追加する必要があることに注意してください。
-
dbx deployコマンドを実行します。dbx、一致する環境の.dbx/project.jsonファイルのartifact_locationパス内の場所にJARをデプロイします。また、dbxは、プロジェクトのファイルをMLflow エクスペリメントの一部として、一致する環境の.dbx/project.jsonファイルのworkspace_directoryパスにリストされている場所にデプロイします。Bashdbx deploy --no-package -
次のオプションを指定して
dbx launchコマンドを実行します。このコマンドは、conf/deployment.yamlに一致する名前でジョブを実行します。ジョブの一部として実行するデプロイされたJARを見つけるために、dbxは、一致する環境の.dbx/project.jsonファイルのartifact_locationパス内の場所を参照します。実行する特定のJARを決定するために、dbxは、一致する環境の.dbx/project.jsonファイルのworkspace_directoryパスに一覧表示されている場所にあるMLflowエクスペリメントを参照します。Bashdbx launch dbx-demo-job -
ジョブ クラスターでジョブ実行の結果を表示するには、「 ジョブとパイプラインの表示」を参照してください。
-
ジョブが参照したエクスペリメントを表示するには、「MLflow エクスペリメントを使用したトレーニング 実行の整理」を参照してください。
-
「次のステップ」に進みます。
CI/CD サポートを使用した Python 用の dbx テンプレート プロジェクトの作成
次のdbx 用の テンプレート化されたプロジェクトは、Python PythonDatabricks汎用クラスター でのコードのバッチ実行と、 ワークスペースでの ジョブ クラスター Databricks、リモート コード アーティファクト デプロイ、およびCI/CD プラットフォームのセットアップのサポートを示しています。(既存の汎用クラスターで単一のPythonコードファイルのバッチ実行のみを示すPythonの最小dbxプロジェクトを作成するには、Pythonの最小dbxプロジェクトの作成に戻る必要があります。
-
ターミナルから、
dbxプロジェクトのルート フォルダでdbx initコマンドを実行します。Bashdbx init -
project_name には、プロジェクトの名前を入力するか、Enterキーを押してデフォルトのプロジェクト名をそのまま使用します。
-
version には、プロジェクトの開始バージョン番号を入力するか、Enterキーを押してデフォルトのプロジェクトバージョンをそのまま使用します。
-
cloud には、プロジェクトで使用するDatabricksクラウドのバージョンに対応する番号を選択するか、Enterキーを押してデフォルト設定をそのまま使用します。
-
cicd_tool では、プロジェクトで使用するサポートされているCI/CDツールに対応する番号を選択するか、Enterキーを押してデフォルト設定をそのまま使用します。
-
project_slug には、プロジェクト内のリソースに使用するプレフィックスを入力するか、Enterキーを押してデフォルト設定をそのまま使用します。
-
workspace_directory には、プロジェクトのワークスペースディレクトリへのローカルパスを入力するか、Enterキーを押してデフォルトの設定をそのまま使用します。
-
artifact_location の場合は、プロジェクトのアーティファクトが書き込まれる場所へのDatabricksワークスペースのパスを入力するか、Enterキーを押してデフォルトを受け入れます。
-
profile には、プロジェクトで使用するCLI認証プロファイルの名前を入力するか、Enterキーを押してデフォルトを受け入れます。
ハードコーディングされたテンプレートパラメーターを指定して dbx init を実行すると、前の手順をスキップできます。以下に例を示します。
dbx init --template="python_basic" \
-p "project_name=cicd-sample-project" \
-p "cloud=AWS" \
-p "cicd_tool=GitHub Actions" \
-p "profile=DEFAULT" \
--no-input
dbx は、project_slug 、workspace_directory 、および artifact_location のパラメーターを自動的に計算します。これら3通りのパラメーターは任意で使用でき、より高度な使用例のみにおいて役立ちます。
dbx ドキュメントの CLI リファレンスの init コマンドを参照してください。
「次の手順」も参照してください。
コード例
dbx でバッチ実行できるコードがない場合は、dbx で以下のコードのバッチ実行をお試しください。このコードは、ワークスペースに小さなテーブルを作成し、そのテーブルに対してクエリを実行し、その後テーブルを削除します。
テーブルを削除せずにワークスペースに残しておきたい場合は、dbx でバッチ実行する前に、この例のコードの最後の行をコメントアウトします。
- Python
- Scala
- Java
# For testing and debugging of local objects, run
# "pip install pyspark=X.Y.Z", where "X.Y.Z"
# matches the version of PySpark
# on your target clusters.
from pyspark.sql import SparkSession
from pyspark.sql.types import *
from datetime import date
spark = SparkSession.builder.appName("dbx-demo").getOrCreate()
# Create a DataFrame consisting of high and low temperatures
# by airport code and date.
schema = StructType([
StructField('AirportCode', StringType(), False),
StructField('Date', DateType(), False),
StructField('TempHighF', IntegerType(), False),
StructField('TempLowF', IntegerType(), False)
])
data = [
[ 'BLI', date(2021, 4, 3), 52, 43],
[ 'BLI', date(2021, 4, 2), 50, 38],
[ 'BLI', date(2021, 4, 1), 52, 41],
[ 'PDX', date(2021, 4, 3), 64, 45],
[ 'PDX', date(2021, 4, 2), 61, 41],
[ 'PDX', date(2021, 4, 1), 66, 39],
[ 'SEA', date(2021, 4, 3), 57, 43],
[ 'SEA', date(2021, 4, 2), 54, 39],
[ 'SEA', date(2021, 4, 1), 56, 41]
]
temps = spark.createDataFrame(data, schema)
# Create a table on the cluster and then fill
# the table with the DataFrame's contents.
# If the table already exists from a previous run,
# delete it first.
spark.sql('USE default')
spark.sql('DROP TABLE IF EXISTS demo_temps_table')
temps.write.saveAsTable('demo_temps_table')
# Query the table on the cluster, returning rows
# where the airport code is not BLI and the date is later
# than 2021-04-01. Group the results and order by high
# temperature in descending order.
df_temps = spark.sql("SELECT * FROM demo_temps_table " \
"WHERE AirportCode != 'BLI' AND Date > '2021-04-01' " \
"GROUP BY AirportCode, Date, TempHighF, TempLowF " \
"ORDER BY TempHighF DESC")
df_temps.show()
# Results:
#
# +-----------+----------+---------+--------+
# |AirportCode| Date|TempHighF|TempLowF|
# +-----------+----------+---------+--------+
# | PDX|2021-04-03| 64| 45|
# | PDX|2021-04-02| 61| 41|
# | SEA|2021-04-03| 57| 43|
# | SEA|2021-04-02| 54| 39|
# +-----------+----------+---------+--------+
# Clean up by deleting the table from the cluster.
spark.sql('DROP TABLE demo_temps_table')
package com.example.demo
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
import java.sql.Date
object SampleApp {
def main(args: Array[String]) {
val spark = SparkSession.builder().master("local").getOrCreate()
val schema = StructType(Array(
StructField("AirportCode", StringType, false),
StructField("Date", DateType, false),
StructField("TempHighF", IntegerType, false),
StructField("TempLowF", IntegerType, false)
))
val data = List(
Row("BLI", Date.valueOf("2021-04-03"), 52, 43),
Row("BLI", Date.valueOf("2021-04-02"), 50, 38),
Row("BLI", Date.valueOf("2021-04-01"), 52, 41),
Row("PDX", Date.valueOf("2021-04-03"), 64, 45),
Row("PDX", Date.valueOf("2021-04-02"), 61, 41),
Row("PDX", Date.valueOf("2021-04-01"), 66, 39),
Row("SEA", Date.valueOf("2021-04-03"), 57, 43),
Row("SEA", Date.valueOf("2021-04-02"), 54, 39),
Row("SEA", Date.valueOf("2021-04-01"), 56, 41)
)
val rdd = spark.sparkContext.makeRDD(data)
val temps = spark.createDataFrame(rdd, schema)
// Create a table on the Databricks cluster and then fill
// the table with the DataFrame's contents.
// If the table already exists from a previous run,
// delete it first.
spark.sql("USE default")
spark.sql("DROP TABLE IF EXISTS demo_temps_table")
temps.write.saveAsTable("demo_temps_table")
// Query the table on the Databricks cluster, returning rows
// where the airport code is not BLI and the date is later
// than 2021-04-01. Group the results and order by high
// temperature in descending order.
val df_temps = spark.sql("SELECT * FROM demo_temps_table " +
"WHERE AirportCode != 'BLI' AND Date > '2021-04-01' " +
"GROUP BY AirportCode, Date, TempHighF, TempLowF " +
"ORDER BY TempHighF DESC")
df_temps.show()
// Results:
//
// +-----------+----------+---------+--------+
// |AirportCode| Date|TempHighF|TempLowF|
// +-----------+----------+---------+--------+
// | PDX|2021-04-03| 64| 45|
// | PDX|2021-04-02| 61| 41|
// | SEA|2021-04-03| 57| 43|
// | SEA|2021-04-02| 54| 39|
// +-----------+----------+---------+--------+
// Clean up by deleting the table from the Databricks cluster.
spark.sql("DROP TABLE demo_temps_table")
}
}
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import java.sql.Date;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.*;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.Dataset;
public class SampleApp {
public static void main(String[] args) {
SparkSession spark = SparkSession
.builder()
.appName("Temps Demo")
.config("spark.master", "local")
.getOrCreate();
// Create a Spark DataFrame consisting of high and low temperatures
// by airport code and date.
StructType schema = new StructType(new StructField[] {
new StructField("AirportCode", DataTypes.StringType, false, Metadata.empty()),
new StructField("Date", DataTypes.DateType, false, Metadata.empty()),
new StructField("TempHighF", DataTypes.IntegerType, false, Metadata.empty()),
new StructField("TempLowF", DataTypes.IntegerType, false, Metadata.empty()),
});
List<Row> dataList = new ArrayList<Row>();
dataList.add(RowFactory.create("BLI", Date.valueOf("2021-04-03"), 52, 43));
dataList.add(RowFactory.create("BLI", Date.valueOf("2021-04-02"), 50, 38));
dataList.add(RowFactory.create("BLI", Date.valueOf("2021-04-01"), 52, 41));
dataList.add(RowFactory.create("PDX", Date.valueOf("2021-04-03"), 64, 45));
dataList.add(RowFactory.create("PDX", Date.valueOf("2021-04-02"), 61, 41));
dataList.add(RowFactory.create("PDX", Date.valueOf("2021-04-01"), 66, 39));
dataList.add(RowFactory.create("SEA", Date.valueOf("2021-04-03"), 57, 43));
dataList.add(RowFactory.create("SEA", Date.valueOf("2021-04-02"), 54, 39));
dataList.add(RowFactory.create("SEA", Date.valueOf("2021-04-01"), 56, 41));
Dataset<Row> temps = spark.createDataFrame(dataList, schema);
// Create a table on the Databricks cluster and then fill
// the table with the DataFrame's contents.
// If the table already exists from a previous run,
// delete it first.
spark.sql("USE default");
spark.sql("DROP TABLE IF EXISTS demo_temps_table");
temps.write().saveAsTable("demo_temps_table");
// Query the table on the Databricks cluster, returning rows
// where the airport code is not BLI and the date is later
// than 2021-04-01. Group the results and order by high
// temperature in descending order.
Dataset<Row> df_temps = spark.sql("SELECT * FROM demo_temps_table " +
"WHERE AirportCode != 'BLI' AND Date > '2021-04-01' " +
"GROUP BY AirportCode, Date, TempHighF, TempLowF " +
"ORDER BY TempHighF DESC");
df_temps.show();
// Results:
//
// +-----------+----------+---------+--------+
// |AirportCode| Date|TempHighF|TempLowF|
// +-----------+----------+---------+--------+
// | PDX|2021-04-03| 64| 45|
// | PDX|2021-04-02| 61| 41|
// | SEA|2021-04-03| 57| 43|
// | SEA|2021-04-02| 54| 39|
// +-----------+----------+---------+--------+
// Clean up by deleting the table from the Databricks cluster.
spark.sql("DROP TABLE demo_temps_table");
}
}
次のステップ
- conf/deployment.yamlファイルを拡張して、さまざまなタイプの汎用クラスター定義とジョブクラスター定義をサポートします。
- マルチタスク ジョブ を
conf/deployment.yamlファイルで宣言します。 conf/deployment.yamlファイル内の名前付きプロパティを参照します。- dbxexecuteコマンドを使用して、クラスター上でコードを新しいジョブとしてバッチ実行します。
追加のリソース
- dbxdeployコマンドを使用して、コードのアーティファクトをDatabricksワークスペースのストレージにバッチでデプロイします。
- dbx launchコマンドを使用して、クラスター上の既存のジョブをバッチ実行します。
- dbxを使用して、アセットベースのワークフローのデプロイメントを実行し、起動します。
- ワークフローのデプロイメントをスケジュールします。
- dbxとCI/CDについてさらに詳しく学びます。
- dbxドキュメント
- GitHubのdatabrickslabs/dbxリポジトリ
- dbxの制限事項