是否可以将 Spark RDD 传递给Python?
因为我需要一个python库来对我的数据进行一些计算,但我的主要Spark项目是基于Scala的。 有没有办法混合它们或让python访问相同的火花上下文?
答案 0 :(得分:17)
您确实可以使用Scala和Spark以及常规Python脚本来管理python脚本。
<强> 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)
<强>输出强>
你好约翰
hello ringo
你好乔治
你好保罗
答案 1 :(得分:7)
您可以通过Spark中的管道运行Python代码。
使用pipe(),您可以编写RDD转换,将标准输入中的每个RDD元素作为String读取,根据脚本指令操作该String,然后将结果作为String写入标准输出。
SparkContext.addFile(path),我们可以在Spark作业启动时为每个工作节点添加文件列表。所有工作节点都将拥有脚本的副本,因此我们将通过以下方式获得并行操作管。我们需要在所有worker和executor节点上安装所有库和依赖项。
示例:
Python文件:将输入数据设为大写的代码
#!/usr/bin/python
import sys
for line in sys.stdin:
print line.upper()
Spark Code :用于管道数据
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)
答案 2 :(得分:-2)
如果我理解正确,只要您从TypeInterface
获取数据并将其转换为RDD
或SparkContext
,您就可以使用pyspark
使用Spark Python API操纵数据。
您还可以使用programming guide来使用scala