Databricks Connect for Pythonの問題解決

注

この記事では、Databricks Runtime 13.3 LTS 以降用の Databricks Connect について説明します。

この記事では、databricks Connect for Pythonのトラブルシューティング情報を提供します。 Databricks Connect を使用すると、一般的な IDE、ノートブック サーバー、カスタム アプリケーションをAzure Databricks クラスターに接続できます。 「Databricks Connect」を参照してください。 この記事の Scala バージョンについては、「Databricks Connect for Scala のトラブルシューティング」を参照してください。

エラー: StatusCode.UNAVAILABLE、StatusCode.UNKNOWN、DNS の解決に失敗したか、状態 500 の http2 ヘッダーを受信しました

問題: Databricks Connect でコードを実行しようとすると、StatusCode.UNAVAILABLE、StatusCode.UNKNOWN、DNS resolution failed、Received http2 header with status: 500 などの文字列を含むエラー メッセージが表示されます。

考えられる原因: Databricks Connect がクラスターに到達できません。

推奨される解決策:

  • ワークスペース インスタンス名が正しいことを確認します。 環境変数を使用する場合は、お使いのローカル開発マシンで関連する環境変数が使用可能であり、正しいことを確認します。
  • クラスター ID が正しいことを確認します。 環境変数を使用する場合は、お使いのローカル開発マシンで関連する環境変数が使用可能であり、正しいことを確認します。
  • ご使用のクラスターのカスタム クラスター バージョンが、Databricks Connect と互換性のある適切ものであることを確認します。

Python バージョンの不一致

ローカルで使用しているPythonバージョンに、クラスター上のバージョンと少なくとも同じマイナー リリースがあることを確認します (たとえば、3.10.11 と 3.10.10 は OK、3.10 と 3.9 は同じではありません)。 サポートされているバージョンについては、 バージョンのサポート マトリックスを参照してください。

複数のPython バージョンがローカルにインストールされている場合は、PYSPARK_PYTHON 環境変数 (PYSPARK_PYTHON=python3 など) を設定して、Databricks Connect が適切なバージョンを使用していることを確認します。

PySpark の競合インストール

databricks-connect パッケージが PySpark と競合している。 両方をインストールすると、Pythonで Spark コンテキストを初期化するときにエラーが発生します。 これは、"ストリームの破損" エラーや "クラスが見つかりません" エラーなど、いくつかのパターンで現れる可能性があります。 Python環境に pyspark がインストールされている場合は、databricks-connect をインストールする前にアンインストールされていることを確認してください。 PySpark をアンインストールした後、Databricks Connect パッケージをすべて再インストールしてください。

pip3 uninstall pyspark
pip3 uninstall databricks-connect
pip3 install --upgrade "databricks-connect==14.0.*"  # or X.Y.* to match your specific cluster version.

Databricks Connect と PySpark は相互に排他的ですが、Python仮想環境を使用して、IDE で databricks-connect を使用してリモート開発を行い、ターミナルで pyspark を使用してローカル テストを行うことができます。 ただし、Databricks では、次の理由により、すべてのテストに serverless compute を使用するPythonに Databricks Connect を使用することをお勧めします。

  • Databricks ランタイム(そのため databricks-connect)には、OSS pysparkで使用できない機能が含まれています。
  • databricks-connectとサーバーレスを使用したテストは、pysparkをローカルで使用する場合よりも高速です。
  • pysparkでは Unity カタログ統合を使用できないため、pysparkをローカルで使用してテストするときに、アクセス許可は適用されません。
  • Databricks コンピューティングなどの外部依存関係を使用してエンド ツー エンドでテストする場合は、単体テストではなく統合テストが最適です。

ローカル Spark クラスターへの接続を引き続き選択する場合は、次を使用して 接続文字列を指定できます。

connection_string = "sc://localhost"
DatabricksSession.builder.remote(connection_string).getOrCreate()

Apache Spark サーバーへの接続エラー

Databricks Connect は、Open source Apache Spark とは異なる依存関係を持つ Databricks ランタイムに対して構築されています。 オープンソース Apache Spark サーバー (sc://localhost でローカルに実行されている Apache Spark 3.5.x Spark Connect サーバー) に接続しようとすると、クラスが見つからない、API の動作の不一致、シリアル化エラーなどのエラーが発生します。 特に、Databricks Connect 15.4 および 16.4 は、別のバージョンの json4s ライブラリを使用するため、Apache Spark 3.5.x と互換性がありません。

オープンソース Apache Spark サーバーではなく、Databricks クラスターまたはサーバーレス コンピューティングを使用します。 Databricks Connect の Compute 構成を参照してください。

バイナリの PATH エントリの競合または欠落

spark-shell のようなコマンドが、Databricks Connect のバイナリではなく、以前にインストールされた他のバイナリを実行するよう、PATH が構成されている場合があります。 Databricks Connect のバイナリを優先とするか、以前にインストールしたバイナリを削除する必要があります。

spark-shellのようなコマンドを実行できない場合は、pip3 installによって PATH が自動的に設定されなかった可能性があり、インストール bin dir を手動で PATH に追加する必要があります。 設定されていない場合でも、IDE で Databricks Connect を使用できます。

ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありませんWindows

Windowsで Databricks Connect を使用している場合は、次を参照してください。

The filename, directory name, or volume label syntax is incorrect.

Databricks Connect がスペースを含むパスのディレクトリにインストールされました。 これに対処するには、スペースのないディレクトリ パスに をインストールするか、短縮名形式を使用してパスを構成します。