apache-spark
Chiamare lavori scala da pyspark
Ricerca…
introduzione
Questo documento ti mostrerà come chiamare i lavori di Scala da un'applicazione pyspark.
Questo approccio può essere utile quando all'API Python mancano alcune funzionalità esistenti dell'API di Scala o anche per far fronte a problemi di prestazioni con Python.
In alcuni casi d'uso, l'uso di Python è inevitabile, ad es. Stai costruendo modelli con scikit-learn
.
Creare una funzione Scala che riceve un RDD python
Creare una funzione Scala che riceve un RDD python è facile. Quello che devi costruire è una funzione che ottiene un JavaRDD [Any]
import org.apache.spark.api.java.JavaRDD
def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
//do something
rdd.map { x => ??? }
}
Serializza e invia python RDD a scala codice
Questa parte dello sviluppo dovrebbe serializzare Python RDD in JVM. Questo processo utilizza lo sviluppo principale di Spark per chiamare la funzione 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)
Come chiamare spark-submit
Per chiamare questo codice devi creare il jar del tuo codice scala. Di quanto devi chiamare la tua scintilla invia come segue:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
Ciò ti consentirà di chiamare qualsiasi tipo di codice di scala di cui hai bisogno nei tuoi lavori pySpark