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



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow