Spark如何与CPython互操作

How does Spark interoperate with CPython

我有一个用 scala 编写的 Akka 系统需要调用一些 Python 代码,依赖于 PandasNumpy,所以我不能只需使用 Jython。我注意到 Spark 在其工作节点上使用 CPython,所以我很好奇它如何执行 Python 代码以及该代码是否以某种可重复使用的形式存在。

因此 Spark 使用 py4j 在 JVM 和 Python 之间进行通信。这允许 Spark 与不同版本的 Python 一起工作,但需要序列化来自 JVM 的数据,反之亦然才能进行通信。在 http://py4j.sourceforge.net/ 有更多关于 py4j 的信息,希望对您有所帮助 :)

此处描述了 PySpark 体系结构 https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals

正如@Holden 所说,Spark 使用 py4j 从 python 访问 JVM 中的 Java 对象。但这只是一种情况——当驱动程序写成 python(图的左边)

另一种情况(右图)——当Spark Worker启动Python进程,将序列化的Java对象发送给python程序处理,并接收输出. Java 对象被序列化为 pickle 格式 - 因此 python 可以读取它们。

看来你要找的是后一种情况。这里有一些指向 Spark 的 scala 核心的链接,可能对您入门有用: