apache-spark
Scala-Jobs von Pyspark aus anrufen
Suche…
Einführung
Dieses Dokument zeigt Ihnen, wie Sie Scala-Jobs über eine Pyspark-Anwendung aufrufen.
Dieser Ansatz kann hilfreich sein, wenn in der Python-API einige vorhandene Funktionen der Scala-API fehlen oder sogar Leistungsprobleme bei der Verwendung von Python auftreten.
In einigen Anwendungsfällen ist die Verwendung von Python unvermeidlich, z. B. scikit-learn
Sie Modelle mit scikit-learn
.
Erstellen einer Scala-Funktion, die eine Python-RDD empfängt
Das Erstellen einer Scala-Funktion, die eine Python-RDD empfängt, ist einfach. Was Sie brauchen, ist eine Funktion, die eine JavaRDD [Any] erstellt.
import org.apache.spark.api.java.JavaRDD
def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
//do something
rdd.map { x => ??? }
}
Serialisieren und Senden von Python-RDD an Scala-Code
In diesem Teil der Entwicklung sollten Sie die Python-RDD mit der JVM serialisieren. Dieser Prozess verwendet die Hauptentwicklung von Spark, um die jar-Funktion aufzurufen.
from pyspark.serializers import PickleSerializer, AutoBatchedSerializer
rdd = sc.parallelize(range(10000))
reserialized_rdd = rdd._reserialize(AutoBatchedSerializer(PickleSerializer()))
rdd_java = rdd.ctx._jvm.SerDe.pythonToJava(rdd._jrdd, True)
_jvm = sc._jvm #This will call the py4j gateway to the JVM.
_jvm.myclass.apps.etc.doSomethingByPythonRDD(rdd_java)
So rufen Sie Spark-Submit an
Um diesen Code aufzurufen, müssen Sie das Glas Ihres Scala-Codes erstellen. Dann musst du deinen Funken so anrufen:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
Damit können Sie jeden Scala-Code aufrufen, den Sie für Ihre pySpark-Jobs benötigen