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



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow