Apache Zeppelin动态表单功能详解
什么是动态表单
Apache Zeppelin的动态表单功能允许用户在Notebook中创建交互式输入控件,这些控件可以动态地影响代码执行结果。根据不同的语言后端,Zeppelin提供了两种创建动态表单的方式:
- 使用模板语法(简单易用)
- 通过编程方式创建(更灵活)
动态表单可以有不同的作用域:
- 段落(paragraph)作用域:仅在当前段落有效
- 笔记(note)作用域:在整个笔记的所有段落中都可用
模板语法创建表单(段落作用域)
这是最简单直接的创建方式,适用于Markdown、Shell、Spark SQL等后端语言。
文本输入框
使用${formName}
语法创建文本输入框:
请输入你的名字:${name}
设置默认值:
请输入你的名字:${name=Zeppelin}
密码输入框
使用${password:formName}
语法创建密码输入框:
请输入密码:${password:secret}
下拉选择框
基本语法:
选择星期:${day=1,1(星期一)|2(星期二)|3(星期三)}
其中:
day
是变量名1
是默认值1(星期一)
表示选项值为1,显示文本为"星期一"
复选框
多选语法:
选择水果:${checkbox:fruit=apple|orange,apple(苹果)|banana(香蕉)|orange(橙子)}
可以指定分隔符:
选择水果:${checkbox(:):fruit=apple|orange,apple(苹果)|banana(香蕉)|orange(橙子)}
自动执行控制
默认情况下,修改选择框值会自动执行段落。如需禁用此功能:
- 点击段落右上角的设置图标
- 取消勾选"Run on selection change"选项
- 仍可通过按Enter键手动执行
模板语法创建表单(笔记作用域)
语法与段落作用域相同,但以两个$
开头,例如:
全局输入:$${global_input}
编程方式创建表单
某些语言后端(如Spark)提供了API来编程创建表单。
Scala/Python示例
文本输入框
// Scala
println("Hello "+z.textbox("name"))
# Python
print("Hello "+z.textbox("name"))
带默认值的文本输入框
// Scala
println("Hello "+z.textbox("name", "sun"))
密码输入框
// Scala
print("Password is "+ z.password("my_password"))
下拉选择框
// Scala
println("Hello "+z.select("day", Seq(
("1","mon"), ("2","tue"), ("3","wed"),
("4","thurs"), ("5","fri"), ("6","sat"), ("7","sun"))))
复选框
// Scala
val options = Seq(("apple","Apple"), ("banana","Banana"), ("orange","Orange"))
println("Hello "+z.checkbox("fruit", options).mkString(" and "))
编程方式创建表单(笔记作用域)
笔记作用域的API与段落作用域类似,但方法名前加"note"前缀:
| 段落作用域方法 | 笔记作用域方法 | |---------------|---------------| | textbox/input | noteTextbox | | select | noteSelect | | checkbox | noteCheckbox |
使用建议
- 对于简单需求,优先使用模板语法,它更直观易用
- 需要复杂逻辑或动态生成选项时,使用编程方式
- 需要跨段落共享数据时,使用笔记作用域表单
- 表单变量可以像普通变量一样在代码中使用
- 注意不同语言后端对动态表单的支持可能不同
动态表单大大增强了Zeppelin Notebook的交互性,使数据分析过程更加灵活高效。通过合理使用各种表单类型和作用域,可以构建出功能丰富的数据分析工作流。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考