apache-spark
Calling scala jobs from pyspark
Zoeken…
Invoering
Dit document laat je zien hoe je Scala-jobs kunt oproepen vanuit een pyspark-applicatie.
Deze benadering kan nuttig zijn wanneer de Python API enkele bestaande functies van de Scala API mist of zelfs om prestatieproblemen met python op te lossen.
In sommige gevallen is het gebruik van Python onvermijdelijk, u bouwt bijvoorbeeld modellen met scikit-learn
.
Een Scala-functie maken die een python-RDD ontvangt
Het maken van een Scala-functie die een RDD met python ontvangt, is eenvoudig. Wat u moet bouwen is een functie die een JavaRDD [Any] krijgt
import org.apache.spark.api.java.JavaRDD
def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
//do something
rdd.map { x => ??? }
}
Serialiseer en verzend python RDD naar scala code
In dit onderdeel van de ontwikkeling moet u de python RDD serialiseren naar de JVM. Dit proces gebruikt de hoofdontwikkeling van Spark om de jar-functie aan te roepen.
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)
Hoe spark-submit te bellen
Om deze code aan te roepen, moet u de pot met uw scala-code maken. Dan moet je je vonk indienen als volgt noemen:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
Hiermee kunt u elke soort scalacode bellen die u nodig hebt in uw pySpark-taken