我的团队正在尝试从Zeppelin过渡到我们构建的应用程序的Jupyter,因为Jupyter似乎有更多的动力,更多的自定义机会,并且通常更加灵活。但是,齐柏林飞艇(Zeppelin)有两件事我们在Jupyter中还无法实现。
主要功能是具有多语言Spark支持-在Jupyter中是否可以创建可通过R,Scala,Python和SQL访问的Spark数据框架,并且都在同一笔记本中?我们已经编写了一个Scala Spark库来创建数据帧并将其交给用户,一旦用户使用了它们,用户可能希望使用各种语言来操纵/询问数据帧。
Livy是在Jupyter上下文中解决此问题的方法,即,它是否允许多个连接(从各种语言的前端)到同一个Spark后端,以便它们可以操纵相同的数据对象?从Livy的网站上我无法完全确定给定的连接是否仅支持一种语言,或者每个会话是否可以具有多个连接。
如果Livy不是一个好的解决方案,BeakerX可以满足这一需求吗? BeakerX网站说其两个主要卖点是:
- 多语种魔术和自动翻译,使您可以在同一笔记本中访问多种语言,并在它们之间进行无缝通信;
- Apache Spark集成,包括GUI配置,状态,进度,中断和表;
但是,我们无法使用BeakerX连接到本地Spark集群以外的任何其他设备,因此我们无法验证多语言实现的实际工作方式。如果我们可以连接到Yarn集群(例如AWS中的EMR集群),那么多语言支持是否可以使我们使用不同的语言访问同一会话?
最后,如果这些都不起作用,那么自定义Magic会起作用吗?也许可以将请求代理到其他内核的东西,例如spark
和pyspark
和sparkr
内核?我用这种方法看到的问题是,我认为每个后端内核都有自己的Spark上下文,但是有没有解决的方法我没有考虑?
(我知道问题不应该征求意见或建议,所以我在这里真正要问的是上述三种选择是否确实存在成功的可能之路,不一定我应该选择哪种选择。)
答案 0 :(得分:1)
我在应用程序中使用Livy。它的工作方式是任何用户都可以使用REST(异步调用)连接到已建立的spark会话。我们有一个集群,Livy在该集群上发送Scala代码以执行。是否要在发送Scala代码后关闭会话由您决定。如果会话是打开的,那么任何具有访问权限的人都可以再次发送Scala代码以进行进一步处理。我没有尝试在通过Livy创建的同一会话中发送不同的语言,但我知道Livy在交互模式下支持3种语言,即R,Python和Scala。因此,从理论上讲,您将能够以任何语言发送代码以执行代码。
希望它会有所帮助。
答案 1 :(得分:1)
另一种可能是SoS(脚本脚本)多语种笔记本https://vatlab.github.io/sos-docs/index.html#documentation。 它在一台笔记本电脑中支持多个Jupyter内核。 SoS具有多种本机支持的语言(R,Ruby,Python 2和3,Matlab,SAS等)。本机不支持Scala,但是可以将信息传递到Scala内核并捕获输出。还有一种看似简单的方法来添加一种新语言(已经有了Jupyter内核)。参见https://vatlab.github.io/sos-docs/doc/documentation/Language_Module.html