python 或者 pyspark 和 java 交互, pyspark 里怎么调用自定义的 jar 包

1. python 直接访问 jar 里面的类

先定义java文件,然后要访问java class, 需要有gateway server 和 entrypoint, 到时候python就可以连接上gateway server访问java object了.具体参考这里 python 怎么调用 java https://www.py4j.org/getting_started.html 用 py4J 作为中间gateway.

2. pyspark 访问jar里面的类

上面讲的是python怎么访问java对象,如果从pyspark 访问java对象就简单多了,因为pyspark会帮你自动创建好gateway server, 所有你的java code 就不需要写gateway server了.  但是pyspark 这端还是需要有专门的code去连接 gateway server的. 示例代码如下.

In PySpark try the following

pyspark --driver-class-path my-test-1.0-SNAPSHOT.jar

from py4j.java_gateway import java_import
java_import(sc._gateway.jvm,"org.foo.module.Foo")

func = sc._gateway.jvm.Foo()
func.fooMethod()

  # 也可以这样 

  sc._jvm.com.mycompany.app.Stack().my_open()

  # 感觉 sc._jvm 和 sc._gateway.jvm 是一样的效果


具体参考这里 pyspark 怎么import java https://stackoverflow.com/questions/33544105/running-custom-java-class-in-pyspark

那么问题来了,可不可以在pyspark 这端可不要这么麻烦的,直接像引用Python module 一样 import xxx_module 这样不是更好吗? 

3. 怎么在pyspark里直接import  jar 里面的class

基于上面的疑问,看 delta lake的官方示例代码的时候有个疑问,人家怎么做到的?

所以就去下载了 io.delta_delta-core_2.11-0.5.0.jar 这个包解压开看了下,才明白,它是在包内部准备好了python文件,直接import的是pyhon 代码当然没问题了.

转载请注明出处 http://www.cnblogs.com/mashuai-191/
原文地址:https://www.cnblogs.com/mashuai-191/p/12552763.html