web-dev-qa-db-fra.com

Comment utiliser les deux Scala et Python dans un même projet Spark?

Est-il possible de diriger Spark RDD vers Python?

Parce que j'ai besoin d'une bibliothèque python pour faire des calculs sur mes données, mais mon projet principal Spark est basé sur Scala. Existe-t-il un moyen de les mélanger tous les deux ou laissez python accéder au même contexte spark?

16
Wilson Liao

Vous pouvez en effet diriger vers un script python en utilisant Scala et Spark et un normal Python script.

test.py

#!/usr/bin/python

import sys

for line in sys.stdin:
  print "hello " + line

Spark-Shell (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)

Sortie

bonjour John

bonjour ringo

bonjour George

salut Paul

20

Vous pouvez exécuter le code Python via Pipe dans Spark.

Avec pipe (), vous pouvez écrire une transformation d'un RDD qui lit chaque élément RDD de l'entrée standard en tant que chaîne, manipule cette chaîne conformément aux instructions de script, puis écrit le résultat sous forme de chaîne dans la sortie standard.

SparkContext.addFile (chemin), nous pouvons ajouter une liste de fichiers pour chacun des nœuds de travail à télécharger lorsqu'un travail Spark démarre. Tous les nœuds de travail auront leur copie du script, nous obtiendra une opération parallèle par pipe. Nous devons installer toutes les bibliothèques et les dépendances avant sur tous les nœuds de travail et d'exécuteur.

Exemple:

Fichier Python: Code pour créer des données d'entrée en majuscules

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

Spark Code: pour la transmission des données

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)
10
Ajay Gupta