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?
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
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)