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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow