[英]Running Custom Java Class in PySpark on EMR
我正在嘗試在 AWS EMR 上的 PySpark 中使用 Cerner Bunsen 包進行 FHIR 處理,特別是 Bundles 類及其方法。 我正在使用 Apache Livy API 創建 spark 會話,
def create_spark_session(master_dns, kind, jars):
# 8998 is the port on which the Livy server runs
host = 'http://' + master_dns + ':8998'
data = {'kind': kind, 'jars': jars}
headers = {'Content-Type': 'application/json'}
response = requests.post(host + '/sessions', data=json.dumps(data), headers=headers)
logging.info(response.json())
return response.headers
其中 kind = pyspark3 和 jars 是存放 jar (bunsen-shaded-1.4.7.jar) 的 S3 位置
數據轉換嘗試導入 jar 並通過以下方式調用方法:
# Setting the Spark Session and Pulling the Existing SparkContext
sc = SparkContext.getOrCreate()
# Cerner Bunsen
from py4j.java_gateway import java_import, JavaGateway
java_import(sc._gateway.jvm,"com.cerner.bunsen.Bundles")
func = sc._gateway.jvm.Bundles()
我收到的錯誤是
“py4j.protocol.Py4JError:調用 None.com.cerner.bunsen.Bundles 時發生錯誤。跟蹤:\npy4j.Py4JException:構造函數 com.cerner.bunsen.Bundles([]) 不存在”
這是我第一次嘗試使用 java_import,因此我們將不勝感激。
編輯:我稍微改變了轉換腳本,現在看到了一個不同的錯誤。 我可以看到 jar 被添加到日志中,所以我確定它在那里並且 jars: jars 功能正在按預期工作。 新的轉變是:
# Setting the Spark Session and Pulling the Existing SparkContext
sc = SparkContext.getOrCreate()
# Manage logging
#sc.setLogLevel("INFO")
# Cerner Bunsen
from py4j.java_gateway import java_import, JavaGateway
java_import(sc._gateway.jvm,"com.cerner.bunsen")
func_main = sc._gateway.jvm.Bundles
func_deep = sc._gateway.jvm.Bundles.BundleContainer
fhir_data_frame = func_deep.loadFromDirectory(spark,"s3://<bucket>/source_database/Patient",1)
fhir_data_frame_fromJson = func_deep.fromJson(fhir_data_frame)
fhir_data_frame_clean = func_main.extract_entry(spark,fhir_data_frame_fromJson,'patient')
fhir_data_frame_clean.show(20, False)
新的錯誤是:
“JavaPackage”對象不可調用
搜索此錯誤有點徒勞,但同樣,如果有人有想法,我會很樂意采納。
如果你想在 Pyspark 中使用 Scala/Java 函數,你還必須在類路徑中添加 jar 包。 你可以用兩種不同的方式做到這一點:
選項 1:在 Spark 中使用標志--jars
提交
spark-submit example.py --jars /path/to/bunsen-shaded-1.4.7.jar
選項2:將其添加到屬性中的spark-defaults.conf
文件中:
添加以下代碼: path/to/spark/conf/spark-defaults.conf
# Comma-separated list of jars include on the driver and executor classpaths.
spark.jars /path/to/bunsen-shaded-1.4.7.jar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.