apache-spark
Llamando scala empleos desde pyspark
Buscar..
Introducción
Este documento le mostrará cómo llamar a los trabajos de Scala desde una aplicación pyspark.
Este enfoque puede ser útil cuando a la API de Python le faltan algunas de las características existentes de la API de Scala o incluso para hacer frente a los problemas de rendimiento con Python.
En algunos casos de uso, el uso de Python es inevitable, por ejemplo, estás creando modelos con scikit-learn
.
Creando una función de Scala que recibe un RDD de python
Crear una función de Scala que reciba un RDD de python es fácil. Lo que necesitas para construir es una función que obtenga un JavaRDD [Cualquiera]
import org.apache.spark.api.java.JavaRDD
def doSomethingByPythonRDD(rdd :JavaRDD[Any]) = {
//do something
rdd.map { x => ??? }
}
Serializar y enviar Python RDD al código de Scala
En esta parte del desarrollo, debe serializar el RDD de Python a la JVM. Este proceso utiliza el desarrollo principal de Spark para llamar a la función 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)
Cómo llamar a spark-submit
Para llamar a este código, debes crear el tarro de tu código de Scala. Entonces tienes que llamar a tu chispa enviar así:
spark-submit --master yarn-client --jars ./my-scala-code.jar --driver-class-path ./my-scala-code.jar main.py
Esto le permitirá llamar a cualquier tipo de código de Scala que necesite en sus trabajos de pySpark