Python如何与Spark内部的JVM交互

时间:2015-04-22 05:15:14

标签: jvm apache-spark pyspark

我正在编写Python代码来开发一些Spark应用程序。我很好奇Python如何与运行JVM进行交互并开始阅读Spark的源代码。

我可以看到,最终,所有Spark转换/操作最终都是以下列方式调用某些jvm方法。

self._jvm.java.util.ArrayList(),
self._jvm.PythonAccumulatorParam(host, port))
self._jvm.org.apache.spark.util.Utils.getLocalDir(self._jsc.sc().conf())
self._jvm.org.apache.spark.util.Utils.createTempDir(local_dir, "pyspark") \
            .getAbsolutePath()
...

作为一名Python程序员,我很好奇这个_jvm对象发生了什么。不过,我已经简要阅读了pyspark下的所有源代码,并且只发现_jvmContext类的属性,除此之外,我对_jvm's属性都一无所知也不是方法。

有谁能帮我理解pyspark如何转换为JVM操作?我应该阅读一些scala代码并查看是否在那里定义了_jvm

1 个答案:

答案 0 :(得分:2)

它使用py4j。有一个特殊的协议可以将python调用转换为JVM调用。您可以在Pyspark代码中找到所有这些信息,请参见java_gateway.py