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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow