apache-spark
Appeler des emplois scala à partir de pyspark
Recherche…
Introduction
Ce document vous montrera comment appeler des travaux Scala depuis une application pyspark.
Cette approche peut être utile lorsque l'API Python manque certaines fonctionnalités existantes de l'API Scala ou même pour résoudre les problèmes de performances liés à l'utilisation de python.
Dans certains cas d'utilisation, l'utilisation de Python est inévitable, par exemple, vous construisez des modèles avec scikit-learn
.
Créer une fonction Scala qui reçoit un RDD python
Créer une fonction Scala qui reçoit un RDD python est facile. Ce que vous devez construire est une fonction qui obtient un JavaRDD [Any]
import org.apache.spark.api.java.JavaRDD
def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
//do something
rdd.map { x => ??? }
}
Sérialiser et envoyer python RDD au code scala
Cette partie du développement, vous devez sérialiser le RDD python à la JVM. Ce processus utilise le développement principal de Spark pour appeler la fonction jar.
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)
Comment appeler spark-submit
Pour appeler ce code, vous devez créer le pot de votre code scala. Que vous devez appeler votre étincelle comme ceci:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
Cela vous permettra d'appeler n'importe quel code scala dont vous avez besoin dans vos tâches pySpark