Поиск…


Вступление

В этом документе будет показано, как вызвать задания 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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow