Spark如何与CPython互操作

时间:2015-06-06 16:18:40

标签: scala pandas apache-spark interop pyspark

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

2 个答案:

答案 0 :(得分:14)

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

PySpark internals

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

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

看起来你正在寻找的是后一种情况。这里有一些指向Spark的scala核心的链接,可以帮助您入门:

答案 1 :(得分:3)

所以Spark使用py4j在JVM和Python之间进行通信。这允许Spark使用不同版本的Python,但需要从JVM序列化数据,反之亦然,以进行通信。有关http://py4j.sourceforge.net/的py4j的更多信息,希望有助于:)