Bei Verwendung von Scala wird DecisionTreeModel.predict als Teil der Karte aufgerufen Eine Transformation kann zu einer Ausnahme führen. Der Grund dafür hängt mit dem Aufruf der Methode JavaModelWrapper.call zusammen.
JavaModelWrapper.call erfordert Zugriff auf den SparkContext, der im Kontext von PySpark auf dem ausgeführt wird Treiber. Allerdings läuft die Map-Transformation auf Worker-Knoten und daher ist der Aufruf von JavaModelWrapper.call aus der Map heraus nicht zulässig.
Eine Lösung besteht darin, den Java-Code als Benutzer zu kapseln -Definierte Funktion (UDF) und verwenden Sie sie in Spark SQL. Dadurch wird das Problem des Aufrufs von Java-Code aus Python-Aufgaben vermieden. Diese Lösung erfordert jedoch eine Datenkonvertierung zwischen Python und Scala und führt zu zusätzlicher Komplexität.
Eine weitere Option besteht darin, benutzerdefinierte Java Service Wrapper zu erstellen, die eine Schnittstelle zum Java-Code bereitstellen von Python. Diese Wrapper können bei Py4j registriert und über org.apache.spark.api.java.JavaRDD.withContext aufgerufen werden, um Zugriff auf den SparkContext zu erhalten.
Während Lösungen wie Java UDFs und Java-Service-Wrapper bieten Workarounds für den Aufruf von Java/Scala-Funktionen aus Spark-Aufgaben heraus. Es ist wichtig, den mit jedem Ansatz verbundenen Overhead und die Einschränkungen zu berücksichtigen, bevor Sie die beste Lösung für Ihren spezifischen Anwendungsfall auswählen.
Das obige ist der detaillierte Inhalt vonSo rufen Sie Java/Scala-Funktionen aus einer Spark-Aufgabe heraus auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!