ipywidgets

ipywidget 是允许用户在笔记本单元格中指定参数值的视觉元素。 可以使用 ipywidgets 使 Databricks Python 笔记本成为交互式笔记本。

ipywidgets 包包含 30 多个不同的控件,其中有滑块、文本框和复选框等窗体控件,以及选项卡、可折叠项和网格等布局控件。 使用这些元素可以生成图形用户界面,用于和笔记本代码进行交互。

注意

要求

  • ipywidgets 在 Databricks Runtime 11.0 中通过 Databricks Runtime 12.2 LTS 作为预览版提供,在 Databricks Runtime 13.0 及更高版本中作为正式版提供。 已启用 Unity Catalog 的群集上的 Databricks Runtime 12.2 LTS 及更高版本中提供了对 Unity Catalog 表的支持。
  • 若要在 Databricks 上使用 ipywidgets,浏览器必须能够访问 databricks-dev-cloudfront.dev.databricks.com 域。

默认情况下,ipywidgets 占用端口 6062。 使用 Databricks Runtime 11.3 LTS 及更高版本时,如果与 Datadog 等第三方集成发生冲突,可以使用以下 Spark 配置更改端口:

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 的群集上的 Databricks Runtime 12.1 及更高版本提供了对 Unity Catalog 表的支持。

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

以下笔记本演示了在笔记本中使用 ipywidget 的一些示例。

ipywidgets 示例笔记本

获取笔记本

笔记本示例:ipywidgets 高级示例

以下笔记本演示了使用 ipywidgets 创建交互式地图的更复杂的示例。

高级示例:使用 ipywidgets 映射

获取笔记本

使用 ipywidgets 和 Databricks 小组件的最佳做法

若要向 Python 笔记本添加交互式控件,Databricks 建议使用 ipywidgets。 对于其他语言的笔记本,请使用 Databricks 小组件

可以使用 Databricks 小组件在笔记本之间传递参数,并将参数传递给作业;ipywidgets 不支持这些场景。

Databricks 支持哪些第三方 Jupyter 小组件?

Databricks 为第三方小组件提供最佳支持,例如 ipyleafletbqplotVegaFusion。 但不支持某些第三方小组件。 有关已在 Azure Databricks 笔记本中经过测试的小组件的列表,请联系 Azure Databricks 帐户团队。

限制

  • 使用 ipywidgets 的笔记本必须附加到正在运行的群集。
  • 小组件状态不会在笔记本会话中保留。 每次将笔记本附加到群集时,必须重新运行小组件单元格才能呈现它们。
  • 不支持密码和控制器 ipywidget。
  • 具有 LaTeX 表达式的 HTMLMath 和 Label 小组件无法正确呈现。 (例如 widgets.Label(value=r'$$\frac{x+1}{x-1}$$') 无法正确呈现。)
  • 如果笔记本处于深色模式,小组件可能无法正确呈现,尤其是彩色小组件。
  • 小组件输出不能用于笔记本仪表板视图。
  • ipywidget 的最大消息有效负载大小为 5 MB。 使用映像或大型文本数据的小组件可能无法正确呈现。