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

Posted

技术标签:

【中文标题】如何在 zeppelin 中将数组从 spark 绑定到 javascript?【英文标题】:How to Bind array from spark to javascript in zeppelin? 【发布时间】:2019-05-21 05:31:17 【问题描述】:

您好,我正在使用 zeppelin 来可视化一些仪表板,我正在使用 Angularjs 解释器来显示系统以配置 Spark 查询,所以我想在 angularJs 的输入文本框中添加自动完成功能,用于自动完成的列表将首先在 spark 中创建然后我想将它绑定到 zeppelinContext 然后从 angular 获取这个列表作为 javascript 脚本来创建自动完成

这里是一个例子:

第 1 段:

     %spark.pyspark
      cList5 =  df_ClientDataF1.select(col("type")).filter(col("type").isNotNull()).distinct().rdd.map(lambda r: r[0]).collect()
      z.z.angularBind("cList5",cList5) 

第 2 段:

   %angular
   <form autocomplete="off">
   <div class="autocomplete" style="width:300px;">
   <input id="myInput" type="text" name="myCountry" placeholder="Country">
   </div>
   <input type="submit">
   </form>
   <script type="text/javascript">
   var element = $('#someId');
   var angularVar = 'cList5';
   var scope = angular.element(element.parent('.ng- scope')).scope().compiledScope;

     function autocomplete(inp, arr) 
    /*the autocomplete function takes two arguments,
   the text field element and an array of possible autocompleted values:*/
    var currentFocus;
 /*execute a function when someone writes in the text field:*/
      .
      .
      .
   /*initiate the autocomplete function on the "myInput" element, and pass along the countries array as possible autocomplete values:*/
     autocomplete(document.getElementById("myInput"), scope);
  </script>

结果变量作用域是一个对象,我试图将它转换为一个数组,但它失败了。问题是如何从 javascript 中的 spark 获取绑定列表作为数组类型。

【问题讨论】:

【参考方案1】:

我正在尝试完全相反的事情:D 但here 是很好的 YT 视频。可能会有所帮助。

【讨论】:

【参考方案2】:

你可以做的是创建一个html element 并隐藏元素的输出。 然后,您可以从脚本访问此元素内部 html。 我知道这是一个 hack,但我还没有找到更好的方法

%angular

<p id="demo" class="hide">cList5</p>

<script>
    var angularVar = document.getElementById("demo").innerHTML
    console.log(angularVar)
</script>

您可能需要进行额外的修改。但是例如将 Json 作为字符串传递并在 scipt 中对其进行解析就可以了。

【讨论】:

以上是关于如何在 zeppelin 中将数组从 spark 绑定到 javascript?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Spark 中将文件写入 Zeppelin 上的远程 hdfs

在 zeppelin 中将 pandas 数据帧转换为 spark 数据帧

Zeppelin - 无法使用 %sql 查询我在 pyspark 注册的表

Spark Standalone + Zeppelin + Docker:如何设置 SPARK_HOME

如何在 Zeppelin 中切换 Spark 版本以使用 Spark 3.x

Zeppelin Spark Maxmind jackson.databind NoSuchMethodError