jvm - Python 如何与 Spark 中的 JVM 交互

标签 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 下的所有源代码只找到 _jvm成为 Context 的属性课,除此之外,我什么都不知道_jvm's属性和方法。

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

最佳答案

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

关于jvm - Python 如何与 Spark 中的 JVM 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29788286/

相关文章:

Tomcat 5.0.28 内存不足错误

dataframe - 如何在执行 spark dataframe.write().insertInto ("table"时确保正确的列顺序)?

scala - 如何使用CrossValidator在不同模型之间进行选择

python - 使用数组对象计算 Spark RDD 中的不同文本

apache-spark - Pyspark UDF 在两列之间返回类似于 groupby().sum() 的结果

python - 有没有更快的方法将一列 pyspark 数据框转换为 python 列表? (收集()很慢)

Java 堆术语 : young, 旧代和永久代?

java - 编译器和运行时系统如何处理java中的嵌套类型?

java - 如何在 groovy 中列出 JVM 中的所有(groovy)类

hadoop - 当网络连接(TCP IP)关闭时如何停止 Spark Streaming 上下文?