apache-spark
Calling scalajobb från pyspark
Sök…
Introduktion
Detta dokument visar hur du kan ringa Scala-jobb från en pyspark-applikation.
Detta tillvägagångssätt kan vara användbart när Python API saknar vissa befintliga funktioner från Scala API eller till och med för att hantera prestandaproblem med Python.
I vissa fall är det oundvikligt att använda Python, till exempel bygger du modeller med scikit-learn
.
Skapa en Scala-funktioner som får en Python RDD
Det är enkelt att skapa en Scala-funktion som får en Python RDD. Vad du behöver bygga är en funktion som får en JavaRDD [Any]
import org.apache.spark.api.java.JavaRDD
def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
//do something
rdd.map { x => ??? }
}
Serialisera och skicka python RDD till skalakod
Denna del av utvecklingen bör du serialisera python RDD till JVM. Denna process använder huvudutvecklingen av Spark för att kalla jar-funktionen.
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)
Hur man ringer gnist-skicka
För att ringa den här koden ska du skapa burken med din skalakod. Än du måste ringa din gnist skicka så här:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
Detta gör att du kan ringa alla typer av skalakoder som du behöver i dina pySpark-jobb