[英]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.