Apache Zeppelin中Angular段落向PySpark段落传递变量的语法问题
问题分析
你在Angular段落中直接给Angular作用域赋值testvar,但该变量仅存在于Angular本地作用域中,未同步到Zeppelin的跨解释器共享上下文,导致PySpark段落通过z.get("testvar")读取时返回None。其他Angular段落能正常读取是因为它们共享同一个Angular作用域,而非通过Zeppelin上下文获取变量。
解决方案
修改Angular段落的代码,使用Zeppelin提供的angularBind方法将变量绑定到共享上下文,而非直接赋值给作用域:
<form id="main_form"></form> <script> $( document ).ready(function() { const angFormScope = angular.element(document.getElementById('main_form')).scope(); // 通过Zeppelin上下文绑定变量,完成跨解释器同步 angFormScope.z.angularBind("testvar", "hello"); }); </script>
如果全局z对象可直接访问,也可以用更简洁的写法:
<script> $(document).ready(function() { z.angularBind("testvar", "hello"); }); </script>
修改后,在PySpark段落中执行原代码即可正常获取变量值:
testvar = z.get("testvar") print(testvar)
补充说明
z.get(key)的语法完全正确,无需指定self,因为z本身就是ZeppelinContext的实例。- Zeppelin的跨解释器变量共享依赖上下文同步机制,直接操作Angular作用域不会触发同步,必须通过
angularBind方法将变量存入共享上下文,才能被PySpark等其他解释器读取。
内容的提问来源于stack exchange,提问作者Alex Kerr
相关产品推荐
相关产品推荐

