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 代碼當然沒問題了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM