Apache Spark 如何支持不同语言的 API

Posted

技术标签:

【中文标题】Apache Spark 如何支持不同语言的 API【英文标题】:How does Apache Spark support different language APIs 【发布时间】:2016-03-13 04:09:05 【问题描述】:

我一直想知道像 Apache Spark 这样支持不同语言 API 的系统的高级架构。例如,Spark 支持 Scala、Python 和 Java 中的 API。

虽然该软件是用 Scala 编写的,但它支持多种语言 API。它是如何在程序级别完成的?有人能解释一下这样的系统的高级架构吗?

【问题讨论】:

【参考方案1】:

Spark 使用 RPC 服务器将 API 公开给其他语言。查看源代码时,您会发现 PySpark 和 SparkR 中的所有对象实际上都是 JVM 对象包装器。看看R DataFrame 和Python DataFrame。在 R 中,有很多 callJMethod() 调用(通过某种代理调用 JVM 对象)。在 Python 中,每个对象都有一个 JVM 对象的句柄。在 DataFrame 的情况下,它是 _jdf(Java DataFrame)。在底层,有 Spark(Scala 实现)在运行,并且有一个 RPC 服务器在运行,它将 JVM 对象(即 SparkContext)暴露给外部进程(在本例中为 PySpark 和 SparkR)。

问题是,如何实现在 Python 或 R 中获取代码的 map()/mapPartitions() 方法?你可能知道 map() 方法创建了一个 RDD 来记住转换。为了支持 Python,Scala Spark 中有一种特殊的 RDD,称为PythonRDD。

另外,还有一个关于PySpark internals 的文档,当然如果你有兴趣的话。

【讨论】:

以上是关于Apache Spark 如何支持不同语言的 API的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache Spark 中添加 Hive 支持? [复制]

最新Apache Spark平台的NLP库,助你轻松搞定自然语言处理任务

Apache Spark 2.0 模型持久性

Spark Transformation 算子

如何计算Apache Spark DataFrame中所有列的不同值的数量[重复]

「大数据系列」:Apache zeppelin 多目标笔记本