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



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow