ホームページ >バックエンド開発 >Python チュートリアル >Spark タスク内から Java/Scala 関数を呼び出す方法
Scala を使用する場合、マップの一部として DecisionTreeModel.predict を呼び出す変換により例外が発生する可能性があります。この理由は、JavaModelWrapper.call メソッドの呼び出しに関連しています。
JavaModelWrapper.call には、PySpark のコンテキストで実行される SparkContext へのアクセスが必要です。ドライバ。ただし、マップ変換はワーカー ノードで実行されるため、マップ内から JavaModelWrapper.call を呼び出すことは許可されません。
1 つの解決策は、Java コードをユーザーとしてカプセル化することです。 -定義された関数 (UDF) を作成し、Spark SQL 内で使用します。これにより、Python タスク内から Java コードを呼び出す問題が回避されます。ただし、このソリューションには Python と Scala 間のデータ変換が必要であり、さらに複雑になります。
別のオプションは、Java コードへのインターフェイスを提供するカスタム Java サービス ラッパーを作成することです。パイソンから。これらのラッパーは Py4j に登録し、org.apache.spark.api.java.JavaRDD.withContext を使用してアクセスして SparkContext にアクセスできます。
一方、Java UDF やJava サービス ラッパーは、Spark タスク内から Java/Scala 関数を呼び出すための回避策を提供します。特定のユースケースに最適なソリューションを選択する前に、各アプローチに関連するオーバーヘッドと制限を考慮することが重要です。
以上がSpark タスク内から Java/Scala 関数を呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。