Spark如何与CPython互操作

Arn*_*sen 12 interop scala pandas apache-spark pyspark

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

vvl*_*rov 15

PySpark架构在这里描述https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals.

PySpark内部

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

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

看起来你正在寻找的是后一种情况.这里有一些指向Spark的scala核心的链接,可能对您有用:


Hol*_*den 5

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