Appel de fonctions Java/Scala à partir d'une tâche PySpark
Dans PySpark, exploiter les fonctionnalités implémentées en Java ou Scala peut présenter des défis. Bien que l'API Scala fournisse une solution de contournement recommandée pour appeler DecisionTreeModel.predict, une solution plus générale est recherchée.
Contexte technique
Le problème survient lors de l'appel de fonctions Java depuis PySpark tâches, notamment en raison de l'implication de JavaModelWrapper.call. Cette méthode tente d'accéder à SparkContext, qui n'est pas disponible dans le code de travail.
Solution élégante
Une solution élégante reste insaisissable. Deux options lourdes existent :
- Extension des classes Spark via des conversions implicites ou des wrappers
- Utilisation directe de la passerelle Py4j
Approches alternatives
Envisagez plutôt des approches alternatives :
-
Utilisation de l'API des sources de données Spark SQL : Encapsulez le code JVM, mais avec une implémentation détaillée et une portée de saisie limitée.
-
Fonctionner sur des DataFrames avec des UDF Scala : Exécuter du code complexe sur des DataFrames, en évitant la conversion de données Python/Scala mais nécessitant un accès Py4j.
-
Création d'une interface Scala : Créez une interface Scala pour l'exécution de code arbitraire, offrant de la flexibilité mais nécessitant des détails d'implémentation et une conversion de données de bas niveau.
-
Outil de gestion de flux de travail externe : Basculez entre les tâches Python/Scala et transmettez les données via un Système de fichiers distribués (DFS), évitant la conversion des données mais entraînant des coûts d'E/S.
-
Contexte SQL partagé : Transmettez les données entre les langues invitées via des tables temporaires, optimisées pour l'analyse interactive mais pas idéales pour le traitement par lots emplois.
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!