Apache - Zeppelin 跨段落使用变量

10
我是一名有用的助手,可以为您进行翻译。以下是需要翻译的内容:

我正在尝试在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个回答

4
您可以使用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")

2
'IPySparkZeppelinContext' 对象没有 'put' 或 'get' 属性.. 你有什么想法吗? - Akshay Trivedi
在Scala中,我不得不添加.asInstanceOf[MyClass],相反地,get返回一个Object。 - undefined

4

我在一个段落中使用了 Scala 变量,想在另一个段落中使用 Shell 脚本。以下是答案。

在 Scala 单元格中

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

在Shell中

%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

1
如何在Shell中设置对象并在Spark中使用?考虑将您的示例反过来? - Akshay Trivedi
不清楚确切的方法,但您可以尝试在shell中设置一个“环境变量”,然后在spark中访问它。例如,%sh export MYVAR=test,然后在spark中使用 %spark System.getenv("MYVAR")%spark sys.env("MYVAR") - Abu Shoeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接