【问题标题】:Apache - Zeppelin using variables across paragraphsApache - Zeppelin 跨段落使用变量
【发布时间】:2016-02-27 22:33:00
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql data-analysis apache-zeppelin


    【解决方案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
    

    【讨论】:

    • 如何在shell中设置对象并在spark中使用?反过来想想你的例子?
    • 不知道确切的方法,但您可以尝试在 shell 中设置ENVIRONMENT VARIABLE,然后在 spark 中访问它。例如,%sh export MYVAR=test,然后在 spark 中 %spark System.getenv("MYVAR")%spark sys.env("MYVAR")
    【解决方案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")
    

    【讨论】:

    • 'IPySparkZeppelinContext' 对象没有属性 'put' 或 'get' .. 对此有什么想法吗?
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2021-10-04
    • 2015-08-22
    • 2017-11-04
    • 2021-06-03
    相关资源
    最近更新 更多