我试图使用 py4j 在 pyspark 中运行一个 java 函数。 Py4j 支持访问 JVM 中的 java 对象。我创建了另一个 JVM 实例并且能够成功运行 java 函数。
py4j 通过 GatewayServer 实例启用此通信。
我想知道我们是否可以通过某种方式访问 spark 的内部 JVM 来运行我的 java 函数? spark 中 py4j Gatewayserver 的入口点是什么?如何将我的函数添加到入口点?
最佳答案
我不确定这是否是您需要的,但我看到了两个地方:
sc._gateway.jvm
可用于java_import或直接
sc._jvm
因此,要访问包 a.b.c 中的类 X,您可以执行以下操作之一:
jvm = sc._gateway.jvm
java_import(jvm,"a.b.c.X")
instance = a.b.c.X()
或更直接:
instance = sc._jvm.a.b.c.X()
要添加一个 java 函数,您需要确保它在类路径中,如果您想在 worker 中使用它(例如在 UDF 中),那么您需要将它发送给 worker。为实现这一点,您可以使用 --driver-class-path 开关将 spark-submit(或 pyspark)添加到驱动程序和 --jars 以发送给工作人员。
关于apache-spark - 它在 spark 中的 py4j gatewayServer 的入口点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35774347/