ipywidgets
ipywidget 是允许用户在笔记本单元格中指定参数值的视觉元素。 可以使用 ipywidgets 使 Databricks Python 笔记本成为交互式笔记本。
ipywidgets 包包含 30 多个不同的控件,其中有滑块、文本框和复选框等窗体控件,以及选项卡、可折叠项和网格等布局控件。 使用这些元素可以生成图形用户界面,用于和笔记本代码进行交互。
注意
- 若要确定群集支持的 ipywidget 版本,请参阅群集的 Databricks Runtime 版本的发行说明。
- 某些 ipywidget 在 Databricks Runtime 15.0 中不起作用。
- 有关 Databricks 小组件的信息,请参阅 Databricks 小组件。 有关何时使用 Databricks 小组件或 ipywidgets 的指南,请参阅使用 ipywidgets 和 Databricks 小组件的最佳做法。
要求
- 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 为第三方小组件提供最佳支持,例如 ipyleaflet、bqplot 和 VegaFusion。 但不支持某些第三方小组件。 有关已在 Azure Databricks 笔记本中经过测试的小组件的列表,请联系 Azure Databricks 帐户团队。
限制
有关详细信息,请参阅 [Databricks 笔记本的已知限制] (notebook-limitations.md)。