如何在同一个 Spark 项目中同时使用 Scala 和 Python?
How to Use both Scala and Python in a same Spark project?
是否可以将 Spark RDD 传输到 Python?
因为我需要一个 python 库来对我的数据进行一些计算,但我的主要 Spark 项目是基于 Scala 的。
有没有办法将它们混合或让 python 访问相同的 spark 上下文?
如果我没理解错的话,只要你从scala
中获取数据并将其转换为RDD
or SparkContext
then you'll be able to use pyspark
,然后使用SparkPythonAPI来操作数据。
还有一个 programming guide,您可以按照它来使用 spark
中的不同语言
您确实可以使用 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)
输出
你好约翰
林戈你好
你好乔治
你好保罗
您可以在 Spark 中通过 Pipe 运行 Python 代码。
使用 pipe(),您可以编写 RDD 的转换,从标准输入读取每个 RDD 元素作为字符串,按照脚本指令操作该字符串,然后将结果作为字符串写入标准输出。
SparkContext.addFile(路径),我们可以为每个工作节点添加文件列表,当一个 Spark 作业 starts.All 工作节点将拥有他们的脚本副本时,我们将下载将通过管道进行并行操作。我们需要先在所有工作节点和执行节点上安装所有库和依赖项。
示例:
Python 文件 : 将输入数据转为大写的代码
#!/usr/bin/python
import sys
for line in sys.stdin:
print line.upper()
Spark 代码:用于传输数据
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)
是否可以将 Spark RDD 传输到 Python?
因为我需要一个 python 库来对我的数据进行一些计算,但我的主要 Spark 项目是基于 Scala 的。 有没有办法将它们混合或让 python 访问相同的 spark 上下文?
如果我没理解错的话,只要你从scala
中获取数据并将其转换为RDD
or SparkContext
then you'll be able to use pyspark
,然后使用SparkPythonAPI来操作数据。
还有一个 programming guide,您可以按照它来使用 spark
您确实可以使用 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)
输出
你好约翰
林戈你好
你好乔治
你好保罗
您可以在 Spark 中通过 Pipe 运行 Python 代码。
使用 pipe(),您可以编写 RDD 的转换,从标准输入读取每个 RDD 元素作为字符串,按照脚本指令操作该字符串,然后将结果作为字符串写入标准输出。
SparkContext.addFile(路径),我们可以为每个工作节点添加文件列表,当一个 Spark 作业 starts.All 工作节点将拥有他们的脚本副本时,我们将下载将通过管道进行并行操作。我们需要先在所有工作节点和执行节点上安装所有库和依赖项。
示例:
Python 文件 : 将输入数据转为大写的代码
#!/usr/bin/python
import sys
for line in sys.stdin:
print line.upper()
Spark 代码:用于传输数据
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)