是否有可能將Python Spark RDD?如何在同一個Spark項目中同時使用Scala和Python?
因爲我需要一個python庫來對我的數據做一些計算,但是我的主要Spark項目是基於Scala的。 有沒有辦法將它們混合在一起或讓python訪問相同的spark上下文?
是否有可能將Python Spark RDD?如何在同一個Spark項目中同時使用Scala和Python?
因爲我需要一個python庫來對我的數據做一些計算,但是我的主要Spark項目是基於Scala的。 有沒有辦法將它們混合在一起或讓python訪問相同的spark上下文?
確實是可以管利用不同語言進行使用Scala的Python腳本和Spark和定期Python腳本。
test.py
#!/usr/bin/python
import sys
for line in sys.stdin:
print "hello " + line
火花 - 殼(階)
val data = List("john","paul","george","ringo")
val dataRDD = sc.makeRDD(data)
val scriptPath = "./test.py"
val pipeRDD = dataRDD.pipe(scriptPath)
pipeRDD.foreach(println)
輸出
你好,約翰
你好林戈
你好喬治
你好保羅
你有沒有跑過這段代碼? –
只能在本地筆記本電腦上使用,而不能在羣集中使用。 –
是的,我知道這種方法,但python腳本運行在執行器上,所以我有一個問題,如果我管道太多的數據外部腳本,工人會崩潰?我的意思是,外部Python腳本不是並行計算。 –
如果我理解正確的話,只要你從scala
取數據,並將其隱蔽到RDD
或SparkContext
,那麼你就可以使用pyspark
操作使用星火的Python API的數據。
還有一個programming guide,你可以按照內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()
星火代碼:滾邊用數據
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)
我建議重寫PySpark中的代碼,但不是所有的Python庫s可以採取rdds。你正在使用哪個Python庫? – Michal
你是否喜歡Spark操作的結果,還是想讓原始RDD在Python中操作?前者不僅是可能的,而且在大數據領域也是常見的。爲Spark結果編寫Python插件需要對細節進行適當的關注,但通常是一個好的解決方案。 您的互聯網搜索是如何提供這些信息的?您使用了哪些搜索條件? http://stackoverflow.com/help/how-to-ask。請發佈您的Spark API以及您想要與之交互的Python級別。 – Prune
我想使用[Jieba](https://github.com/fxsjy/jieba)進行文本處理,這是一箇中文分詞庫。 我使用Spark Streaming + Kafka進行數據收集。現在的問題是我需要將原始數據傳輸到Python進行文本處理,然後將結果發送回其他Scala代碼進行其他分析。 –