Python 如何与 Spark 中的 JVM 交互

Posted

技术标签:

【中文标题】Python 如何与 Spark 中的 JVM 交互【英文标题】:How Python interact with JVM inside Spark 【发布时间】:2015-04-22 05:15:13 【问题描述】:

我正在编写 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

【问题讨论】:

它使用py4j。有一个特殊的协议可以将 python 调用转换为 JVM 调用。所有这些都可以在 Pyspark 代码中找到,请参阅 java_gateway.py 我也发现这个link很有帮助: @artemdevel 最好将该评论转换为答案。也许没有什么可以添加的。 @artemdevel 您应该将您的评论转换为答案。 @Chris 你在这里 :) 【参考方案1】:

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

【讨论】:

以上是关于Python 如何与 Spark 中的 JVM 交互的主要内容,如果未能解决你的问题,请参考以下文章

教你如何在Spark Scala/Java应用中调用Python脚本

教你如何在Spark Scala/Java应用中调用Python脚本

spark安装部署

GC调优在Spark应用中的实践(转载)

py4j.protocol.Py4JError: org.apache.spark.api.python.PythonUtils.getEncryptionEnabled 在 JVM 中不存在

使用Python计算四边形与拟合四边形的最大交并比IOU