Maison >développement back-end >Tutoriel Python >Comment appeler des fonctions Java/Scala à partir d'une tâche Spark
Lors de l'utilisation de Scala, invocation de DecisionTreeModel.predict dans le cadre de la carte la transformation peut entraîner une exception. La raison en est liée à l'appel à la méthode JavaModelWrapper.call.
JavaModelWrapper.call nécessite l'accès au SparkContext, qui, dans le contexte de PySpark, s'exécute sur le conducteur. Cependant, la transformation de la carte s'exécute sur les nœuds de travail, et donc appeler JavaModelWrapper.call depuis la carte n'est pas autorisé.
Une solution consiste à encapsuler le code Java en tant qu'utilisateur -fonction définie (UDF) et utilisez-la dans Spark SQL. Cela évite le problème de l'appel de code Java à partir de tâches Python. Cependant, cette solution nécessite une conversion de données entre Python et Scala et introduit une complexité supplémentaire.
Une autre option consiste à créer des wrappers de service Java personnalisés qui fournissent une interface avec le code Java. de Python. Ces wrappers peuvent être enregistrés auprès de Py4j et accessibles à l'aide de org.apache.spark.api.java.JavaRDD.withContext pour accéder à SparkContext.
Alors que des solutions telles que les UDF Java et Les wrappers de services Java fournissent des solutions de contournement pour appeler des fonctions Java/Scala à partir de tâches Spark. Il est essentiel de prendre en compte la surcharge et les limitations associées à chaque approche avant de sélectionner la meilleure solution pour votre cas d'utilisation spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!