3

我的团队正在为我们构建的应用程序尝试从 Zeppelin 过渡到 Jupyter,因为 Jupyter 似乎有更大的动力,更多的定制机会,并且通常更灵活。然而,在 Jupyter 中,有几件 Zeppelin 是我们无法实现的。

主要是支持多语言 Spark - Jupyter 是否可以在同一个笔记本中创建可通过 R、Scala、Python 和 SQL 访问的 Spark 数据帧?我们编写了一个 Scala Spark 库来创建数据帧并将它们交还给用户,用户可能想要使用各种语言来操作/询问数据帧。

Livy是Jupyter 上下文中的解决方案吗,即它是否允许多个连接(从各种语言前端)到一个公共 Spark 后端,以便它们可以操作相同的数据对象?我不能从 Livy 的网站上完全判断给定的连接是否只支持一种语言,或者每个会话是否可以有多个连接。

如果 Livy 不是一个好的解决方案,BeakerX 可以满足这个需求吗?BeakerX 网站称其两个主要卖点是:

  • 多语言魔法和自动翻译,让您可以在同一个笔记本中访问多种语言,并在它们之间无缝通信;
  • Apache Spark 集成,包括 GUI 配置、状态、进度、中断和表格;

但是,我们无法使用 BeakerX 连接到本地 Spark 集群以外的任何东西,因此我们无法验证多语言实现的实际工作原理。如果我们可以连接到 Yarn 集群(例如 AWS 中的 EMR 集群),多语言支持是否可以让我们使用不同的语言访问相同的会话?

最后,如果这些都不起作用,自定义魔法会起作用吗?也许可以将请求代理到其他内核,例如和spark内核?我看到这种方法的问题是,我认为每个后端内核都有自己的 Spark 上下文,但是有没有我没有想到的解决方法?pysparksparkr

(我知道 SO 问题不应该征求意见或建议,所以我在这里真正要问的是,上述三种选择是否真的存在可能的成功之路,不一定我应该选择其中的哪一种。)

4

2 回答 2

2

另一种可能是 SoS(Script of Scripts)多语言笔记本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

于 2018-12-24T14:21:12.120 回答
1

我在我的应用程序中使用 Livy。它的工作方式是任何用户都可以使用 REST(异步调用)连接到已经建立的 spark 会话。我们有一个集群,Livy 在其上发送 Scala 代码以供执行。发送 scala 代码后是否要关闭会话由您决定。如果会话打开,那么任何有权访问的人都可以再次发送 Scala 代码以进行进一步处理。我没有尝试在通过 Livy 创建的同一会话中发送不同的语言,但我知道 Livy 在交互模式下支持 3 种语言,即 R、Python 和 Scala。因此,理论上您可以发送任何语言的代码以供执行。

希望它在一定程度上有所帮助。

于 2018-08-14T09:55:35.580 回答