Szukaj…


Wprowadzenie

W tym dokumencie pokazano, jak wywoływać zlecenia Scala z aplikacji pyspark.

Takie podejście może być przydatne, gdy interfejs API języka Python nie zawiera niektórych istniejących funkcji interfejsu API Scala, a nawet radzi sobie z problemami z wydajnością przy użyciu języka Python.

W niektórych przypadkach użycie Pythona jest nieuniknione, np. scikit-learn modele za pomocą scikit-learn .

Tworzenie funkcji Scala, które odbierają RDD python

Tworzenie funkcji Scala, która odbiera RDD python jest łatwe. To, co musisz zbudować, to funkcja, która otrzymuje JavaRDD [Dowolny]

import org.apache.spark.api.java.JavaRDD

def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
    //do something
    rdd.map { x => ??? }
}

Serializuj i wysyłaj python RDD do kodu Scala

W tej części programowania powinieneś szeregować RDD python do JVM. Proces ten wykorzystuje główny rozwój Spark do wywołania funkcji 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)

Jak zadzwonić do Spark-Submit

Aby wywołać ten kod, należy utworzyć słoik kodu Scala. Następnie musisz zadzwonić do swojego Spark Spark w następujący sposób:

spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py

Umożliwi to wywołanie dowolnego kodu Scala, który jest potrzebny w zadaniach pySpark



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow