apache-spark
Wywoływanie zleceń scala z pyspark
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