如何從 Spark 任務呼叫 Java/Scala 函數

Mary-Kate Olsen
發布: 2024-10-21 14:56:30
原創
973 人瀏覽過

How to Call Java/Scala Functions from Within a Spark Task

從Spark 任務中呼叫Java/Scala 函數

背景

使用Scala 時,呼叫DecisionTreeModel.predict 作為地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分轉換可能會導致地圖的一部分異常。其原因與 JavaModelWrapper.call 方法的呼叫有關。

理解問題

JavaModelWrapper.call 需要存取 SparkContext,在 PySpark 的上下文中,SparkContext 運行在司機。但是,映射轉換在工作節點上運行,因此不允許從映射內呼叫 JavaModelWrapper.call。

使用 Java UDF 的解決方案

一種解決方案是將 Java 程式碼封裝為使用者- 定義函數 (UDF) 並在 Spark SQL 中使用它。這避免了從 Python 任務中呼叫 Java 程式碼的問題。但是,此解決方案需要在 Python 和 Scala 之間進行資料轉換,並帶來額外的複雜性。

使用 Java 服務包裝器的解決方案

另一個選項是建立自訂 Java 服務包裝器,為 Java 程式碼提供介面來自Python。這些包裝器可以在 Py4j 中註冊,並使用 org.apache.spark.api.java.JavaRDD.withContext 進行訪問,以獲得對 SparkContext 的存取權限。

結論

雖然Java UDF 和Java 服務包裝器提供了從Spark 任務中呼叫Java/Scala 函數的解決方法,在為您的特定用例選擇最佳解決方案之前,必須考慮與每種方法相關的開銷和限制。

以上是如何從 Spark 任務呼叫 Java/Scala 函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!