¿Cómo usar tanto Scala como Python en un mismo proyecto Spark?

¿Es posible canalizar Spark RDD a Python?

Porque necesito una biblioteca de Python para hacer un cálculo de mis datos, pero mi proyecto principal de Spark se basa en Scala. ¿Hay alguna forma de mezclarlos o permitir que Python acceda al mismo contexto de chispa?

De hecho, puedes dirigirte a un script de Python utilizando Scala y Spark y un script de Python normal.

test.py

#!/usr/bin/python import sys for line in sys.stdin: print "hello " + line 

concha de chispa (scala)

 val data = List("john","paul","george","ringo") val dataRDD = sc.makeRDD(data) val scriptPath = "./test.py" val pipeRDD = dataRDD.pipe(scriptPath) pipeRDD.foreach(println) 

Salida

Hola John

hola ringo

Hola George

hola paul

Puede ejecutar el código Python a través de Pipe en Spark.

Con pipe (), puede escribir una transformación de un RDD que lea cada elemento RDD de la entrada estándar como String, manipule esa String según las instrucciones del script y luego escriba el resultado como String en la salida estándar.

SparkContext.addFile (ruta), podemos agregar una lista de archivos para que cada uno de los nodos de trabajo se descargue cuando se inicie un trabajo de Spark. Todo el nodo de trabajo tendrá su copia del script, por lo que obtendremos una operación paralela por canalización. Necesitamos instalar todas las bibliotecas y dependencias antes de ello en todos los nodos de trabajadores y ejecutores.

Ejemplo:

Archivo Python : Código para hacer datos de entrada a mayúsculas

 #!/usr/bin/python import sys for line in sys.stdin: print line.upper() 

Código de chispa : Para canalizar los datos.

 val conf = new SparkConf().setAppName("Pipe") val sc = new SparkContext(conf) val distScript = "/path/on/driver/PipeScript.py" val distScriptName = "PipeScript.py" sc.addFile(distScript) val ipData = sc.parallelize(List("asd","xyz","zxcz","sdfsfd","Ssdfd","Sdfsf")) val opData = ipData.pipe(SparkFiles.get(distScriptName)) opData.foreach(println) 

Si te comprendo correctamente, siempre que tomes los datos de scala y los SparkContext en RDD o SparkContext , podrás usar pyspark para manipular los datos mediante la API de Spark Python.

También hay una guía de progtwigción que puede seguir para utilizar los diferentes idiomas dentro de spark