如何在 Zeppelin 的 javascript 中将变量放入 z ZeppelinContext?

Posted

技术标签:

【中文标题】如何在 Zeppelin 的 javascript 中将变量放入 z ZeppelinContext?【英文标题】:How to put a variable into z ZeppelinContext in javascript in Zeppelin? 【发布时间】:2016-11-15 01:36:15 【问题描述】:

在 Scala 和 Python 中是:

z.put("varname", variable)

但在 javascript 中我得到(在控制台中)

Uncaught ReferenceError: z is not defined

我真正想做的是在 Zeppelin 中使用 z.angular("varname") 从 Scala 代码访问 javascript 变量,但我没有运气:(

在一个单元格中完全需要类似的东西

%angular
<script>
var myVar = "hello world";

// some magic code here!
</script>

然后在另一个单元格中

println(z.angular("myVar"))

更新:

这就是我到目前为止所拥有的,我完全是在黑暗中刺伤,因为我更像是一个后端/数据科学类的人。所以提前为我的前端绝望道歉。

单元格 1:

z.angularBind("myVar", "myVar")
z.angularBind("msg", "msg")

注意我不知道在第二个参数中放什么。

单元格 2:

%angular

<div ng-app>
    <div id="outer" ng-controller="MsgCtrl">
        You are msg
    </div>
    <div onclick="change()">click me</div>
</div>

<script>
var myVar = "hello world";

function MsgCtrl($scope) 

    $scope.msg = "foo";
    // also experimented with $scope.msg = myVar;


function change() 
    var scope = angular.element($("#outer")).scope();
    scope.$apply(function()
        scope.msg = 'Superhero';
    )

</script>

单元格 3:

z.angular("msg")
z.angular("myVar")

无论我做什么,我都会得到 null 或 var 名称。

我也没有看到一个按钮或任何“点击”的东西。

【问题讨论】:

【参考方案1】:

在 Angular 解释器中。我们可以

html 内容中使用

name

绑定

ng-model='name'

通过 ng-click 或其他角度指令使用或设置。

ng-click="name='Rockie'"

根据许多 SO,在 Angular 控制器之外修改范围变量并不是一个好习惯。我也没有让它在 Zeppelin 中工作。不过有一个normal js fiddle example。

在 Spark 解释器中。我们可以

绑定

z.angularBind("name", "Knock Data")

解除绑定

z.angularUnbind("name")

取值,变量需要先绑定,否则为空。

z.angular("name")

观察变量

z.angularWatch("name", (oldValue: Object, newValue: Object) => println(s"value changed from $oldValue to $newValue" )

在角绑定旁边。 Dynamic Form 是为最终用户提供互动的好方法

输入

z.input("number", 1).toString.toInt

选择不带默认值

z.select("Day", Seq(("1", "Mon"), ("2", "Tue")))

选择默认值,

z.select("Day", "1", Seq(("1", "Mon"), ("2", "Tue")))

检查

z.checkbox("good applications", Seq(("1", "Zeppelin"), ("2", "Highcharts"), ("3", "Spark")))

【讨论】:

感谢阅读这篇文章让我学到了很多。所以我将&lt;div ng-model='myVar'&gt; 添加到我的%angular 单元格的末尾,但我仍然在Scala 单元格中为z.angular("myVar") 获得null :( 我也尝试使用链接中的示例,但我只是不断得到nullz.angular("msg") :( 你首先需要 z.angularBind,然后是 ng-model。之后,您可以使用 z.angular 获取值。 谢谢,我已经更新了我的答案,以显示我到目前为止所拥有的内容。 我缺少的是如何在角度值发生变化时触发 javascript 代码。我想在循环中执行 z.angularBind("data", data) ,并在数据更改时触发我在 javascript 中的重新显示逻辑。【参考方案2】:

这对我有用

%角度

<div id="map" style="height: 300px; width: 50%" ng-model="id_selected_arr"/>

%spark2

var result = z.angular("id_selected_arr")

但是我遇到了另一个问题,如何处理数组...也许有人会回答你,它也对你有帮助检查它here

【讨论】:

以上是关于如何在 Zeppelin 的 javascript 中将变量放入 z ZeppelinContext?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 zeppelin 中将数组从 spark 绑定到 javascript?

将 Zeppelin 与外部 javascript 工具一起使用,例如 plotly

Zeppelin:如何在 zeppelin 中重新启动 sparkContext

如何在 Zeppelin 中设置 SSL

如何在 Zeppelin 中加载 hiveContext?

在 Zeppelin 中如何使用 Hive