apache-spark
Вызов работ scala из pyspark
Поиск…
Вступление
В этом документе будет показано, как вызвать задания Scala из приложения pyspark.
Этот подход может быть полезен, когда API Python пропускает некоторые существующие функции из Scala API или даже справляется с проблемами производительности с помощью python.
В некоторых случаях использование Python неизбежно, например, вы строите модели с помощью scikit-learn
.
Создание функций Scala, которые получают python RDD
Создание функции Scala, получающей python RDD, очень просто. Что нужно построить - это функция, которая получает JavaRDD [Any]
import org.apache.spark.api.java.JavaRDD
def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
//do something
rdd.map { x => ??? }
}
Сериализовать и отправить python RDD в scala-код
В этой части разработки вы должны сериализовать RDD python в JVM. Этот процесс использует основную разработку Spark для вызова функции 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)
Как позвонить spark-submit
Чтобы вызвать этот код, вы должны создать банку своего scala-кода. Чем вы должны называть свою искру, вот так:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
Это позволит вам называть любой вид scala-кода, который вам нужен в ваших задачах pySpark