9

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

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

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

深入研究代码,我看到在 Zeppelin-interpreter 内部,一个名为Input.javachecks for a pattern的文件${someColumn=someValues}填充了组合框选项,然后创建了一个简单的查询,因此我放弃了通过运行查询来填充它的想法在同一段中。

4

2 回答 2

4

我正在使用从一个段落到另一段的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.2Zeppelin 2.3. 同样在 中2.3,插值的值可以从sh.config单元格中更改。

%sh.conf
zeppelin.shell.interpolation true
于 2019-05-07T06:07:49.410 回答
2

您可以使用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")
于 2017-12-19T16:01:22.890 回答