簡體   English   中英

Pyspark並行執行多個作業

[英]Pyspark multiple jobs in parallel

我的Pyspark遇到以下情況:

在我的驅動程序(driver.py)中,我從另一個文件(prod.py)調用了一個函數

latest_prods = prod.featurize_prods(). 

驅動程序代碼:

from Featurize import Featurize
from LatestProd import LatestProd
from Oldprod import Oldprod

sc = SparkContext()

if __name__ == '__main__':
    print 'Into main'

featurize_latest = Featurize('param1', 'param2', sc)

latest_prod = LatestProd(featurize_latest)
latest_prods = latest_prod.featurize_prods()
featurize_old = Featurize('param3', 'param3', sc)

old_prods = Oldprod(featurize_old)
old_prods = oldprod.featurize_oldprods()
total_prods =  sc.union([latest_prods, old_prods])

然后我在這里做一些reduceByKey代碼...生成total_prods_processed

最后我打電話給:

total_prods_processed.saveAsTextFile(...)

我想並行生成latest_prods和old_prods。 兩者都在同一個SparkContext中創建。 有可能這樣做嗎? 如果沒有,我如何實現該功能?

這是自動執行Spark的功能嗎? 我在運行代碼時沒有看到此行為,因此請告知它是否是配置選項。

在互聯網上搜索后,我認為您的問題可以通過線程解決。 這就像為old_prod和latest_prod工作創建兩個線程一樣簡單。

查看此帖子以獲取簡化示例。 由於Spark是線程安全的,因此您無需犧牲任何東西即可獲得並行效率。

簡短的答案是“不”,您不能在同一火花上下文中同時調度兩個不同的RDD上的操作。 但是,有一些解決方法,您可以在同一群集上的兩個不同的SparkContext中對其進行處理,然后調用SaveAsTextFile。 然后在另一個作業中閱讀兩者以執行合並。 (文檔不建議這樣做)。 如果您想嘗試此方法,此處將使用spark-jobserver進行討論,因為spark默認情況下不支持多個上下文: https : //github.com/spark-jobserver/spark-jobserver/issues/147

但是,根據您執行的操作,由於您需要完整的結果來執行合並,因此沒有理由同時處理這兩個操作,Spark會將這些操作分為兩個不同的階段,一個接一個地執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM