我正在编写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下的所有源代码,并且只发现_jvm
是Context类的属性,除此之外,我对_jvm's
属性都一无所知也不是方法。
有谁能帮我理解pyspark如何转换为JVM操作?我应该阅读一些scala代码并查看是否在那里定义了_jvm
?