ipywidgets

IPYウィジェットは 、ユーザーがノートブックのセルでパラメーター値を指定できるようにするビジュアル要素です。 ipywidgets を使用して、Databricks Python ノートブックを対話型にすることができます。

ipywidgets パッケージには、スライダー、テキストボックス、チェックボックスなどのフォームコントロールや、タブ、アコーディオン、グリッドなどのレイアウトコントロールなど、 30 を超えるさまざまなコントロールが含まれています。 これらの要素を使用して、ノートブック コードとインターフェイスするグラフィカル ユーザー インターフェイスを構築できます。

要件

  • ipywidgets は、Databricks Runtime 11.1 から Databricks Runtime 12.2 LTS でプレビューで使用でき、Databricks Runtime 13.0 以降で一般公開されています。 Unity Catalog テーブルのサポートは、Unity Catalog 対応クラスターの Databricks Runtime 12.1 以降で使用できます。

  • Databricks で ipywidgets を使用するには、ブラウザがdatabricks-dev-cloudfront.dev.databricks.comドメインにアクセスできる必要があります。

By default, ipywidgets occupies port 6062. With Databricks Runtime 11.3 LTS and above, if you run into conflicts with third-party integrations such as Datadog, you can change the port using the following Spark config:

spark.databricks.driver.ipykernel.commChannelPort <port-number>

例:

spark.databricks.driver.ipykernel.commChannelPort 1234

Spark 構成は、クラスターの作成時に設定する必要があります。

使い

次のコードは、3 から 10 までの値を取ることができるスライダーを持つヒストグラムを作成します。 ウィジェットの値によって、ヒストグラム内のビンの数が決まります。 スライダーを動かすと、ヒストグラムがすぐに更新されます。 これを試すには 、ipywidgets サンプル ノートブック を参照してください。

import ipywidgets as widgets
from ipywidgets import interact

# Load a dataset
sparkDF = spark.read.csv("/databricks-datasets/bikeSharing/data-001/day.csv", header="true", inferSchema="true")

# In this code, `(bins=(3, 10)` defines an integer slider widget that allows values between 3 and 10.
@interact(bins=(3, 10))
def plot_histogram(bins):
  pdf = sparkDF.toPandas()
  pdf.hist(column='temp', bins=bins)

次のコードは、0 から 10 までの値を取ることができる整数スライダーを作成します。 デフォルト値は 5 です。 コード内のスライダーの値にアクセスするには、 int_slider.valueを使用します。

import ipywidgets as widgets

int_slider = widgets.IntSlider(max=10, value=5)
int_slider

次のコードは、 Unity Catalogのテーブルからサンプル データフレームを読み込んで表示します。 Unity Catalog テーブルのサポートは、 Unity Catalog 対応クラスターの Databricks Runtime12.1 以降で使用できます。

import ipywidgets as widgets

# Create button widget. Clicking this button loads a sampled dataframe from UC table.
button = widgets.Button(description="Load dataframe sample")

# Output widget to display the loaded dataframe
output = widgets.Output()

def load_sample_df(table_name):
  return spark.sql(f"SELECT * FROM {table_name} LIMIT 1000")

def on_button_clicked(_):
    with output:
      output.clear_output()
      df = load_sample_df('<catalog>.<schema>.<table>')
      print(df.toPandas())

# Register the button's callback function to query UC and display results to the output widget
button.on_click(on_button_clicked)

display(button, output)

ノートブックの例: ipywidgets

次のノートブックは、ノートブックで ipywidgets を使用する例をいくつか示しています。

ipyウィジェットのサンプルノートブック

ノートブックを新しいタブで開く

ノートブックの例: ipywidgets の高度な例

次のノートブックは、ipywidgets を使用して対話型マップを作成する、より複雑な例を示しています。

高度な例: ipywidget を使用したマップ

ノートブックを新しいタブで開く

ipywidgets ウィジェットと Databricks ウィジェット を使用するためのベスト プラクティス

Python ノートブックに対話型コントロールを追加するには、 Databricks ipywidgets を使用することをお勧めします。 他の言語のノートブックの場合は、 Databricks ウィジェットを使用します。

Databricks ウィジェットを使用して、ノートブック間でパラメーターを渡したり、ジョブに パラメーターを渡 したりできます。IPYウィジェットは、これらのシナリオをサポートしていません。

どのサードパーティの Jupyter ウィジェットが Databricks でサポートされていますか?

Databricks は、 ipyleafletbqplotVegaFusion などのサードパーティ製ウィジェットに対してベストエフォート型サポートを提供します。 ただし、一部のサードパーティウィジェットはサポートされていません。 Databricks ノートブックでテストされたウィジェットの一覧については、Databricks アカウント チームにお問い合わせください。

制限

  • ipywidgets を使用するノートブックは、稼働中のクラスターにアタッチする必要があります。

  • ウィジェットの状態は、ノートブック・セッション間で保持されません。 ウィジェットセルを再実行して、ノートブックをクラスターにアタッチするたびにレンダリングする必要があります。

  • パスワードとコントローラの ipywidget はサポートされていません。

  • LaTeX 式を含む HTMLMath ウィジェットとラベルウィジェットが正しくレンダリングされません。 (たとえば、 widgets.Label(value=r'$$\frac{x+1}{x-1}$$') が正しくレンダリングされません)。

  • ノートブックがダークモードの場合、ウィジェット、特に色付きのウィジェットが正しくレンダリングされない可能性があります。

  • ウィジェット出力は、ノートブックダッシュボードビューでは使用できません。

  • ipywidget の最大メッセージペイロードサイズは 5 MB です。 画像や大きなテキストデータを使用するウィジェットは、正しくレンダリングされない場合があります。