Apache - Zeppelin跨段使用变量

时间:2015-11-25 08:12:30

标签: sql data-analysis apache-zeppelin

我正在尝试在Apache Zeppelin上完成以下用例: 当我编写sql查询时,例如

%sql SELECT * FROM table1 WHERE column1 = ${column1=1,1|2|3|4}

我得到一个显示这些值为(1,2,3,4)的组合框作为选项。 我想要做的是使用此列可用的所有不同值填充此列表(或者事实上,我可能希望从变量形式的另一个段落中获取任何其他值集)。所以目前我仍然坚持如何在另一段中的sql语句中使用一个段落中定义的变量?

深入了解代码,我在Zeppelin解释器中看到一个名为Input.java的文件检查模式${someColumn=someValues},填充组合框选项,然后创建一个简单的查询,因此我放弃了通过在同一段落中运行查询来填充它的想法。

2 个答案:

答案 0 :(得分:1)

您可以使用ZeppelinContext来完成此操作,因为它允许您使用put()和get()来设置和检索段落之间的对象。

从链接页面引用示例,请注意 z 对象是ZeppelinContext的默认实例:

// Put object from scala
%spark
val myObject = ...
z.put("objName", myObject)

# Get object from python
%spark.pyspark
myObject = z.get("objName")

答案 1 :(得分:1)

我正在使用一个段落中的Scala变量到另一段落中的Shell Script。这就是答案。

在Scala单元格中

%spark2
val myVal = "test-value-across-paragraphs"
z.put("objName", myVal)

在壳单元中

%sh
echo {objName}

这需要启用对象插值,这可以通过将属性zeppelin.shell.interpolation的值设置为true来完成。检查Apache Zeppelin以获得更多帮助。

更新2019年5月19日

以上过程可能在Zeppelin 2.2中无效,但显然在Zeppelin 2.3中有效。同样在2.3中,可以从sh.config单元中更改内插值。

%sh.conf
zeppelin.shell.interpolation true