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

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

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

【问题讨论】:

    标签: api apache-spark


    【解决方案1】:

    Spark 使用 RPC 服务器将 API 公开给其他语言。查看源代码时,您会发现 PySpark 和 SparkR 中的所有对象实际上都是 JVM 对象包装器。看看R DataFramePython 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 的文档,当然如果你有兴趣的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      相关资源
      最近更新 更多