[英]How to create python threads in pyspark code
我有大約70個蜂巢查詢,我正在pyspark中按順序執行。 我正在研究通過並行運行配置單元查詢來改善運行時的方法。 我計划通過創建python線程並在線程中運行sqlContext.sql來做到這一點。 這會在驅動程序中創建線程並提高性能。
我假設,您對這些配置單元查詢沒有任何依賴性,因此它們可以並行運行。 您可以通過線程來完成此操作,但不確定在單個用戶應用程序中的好處-因為群集的資源總數是固定的,即完成所有查詢的總時間將與Spark調度程序相同對這些單個作業進行輪巡-當您多線程時。
https://spark.apache.org/docs/latest/job-scheduling.html對此進行了說明1)默認情況下,SPARK使用FIFO調度程序(您正在觀察)2)通過線程化,您可以使用“公平”調度程序3)確保要線程化的方法-設置此sc.setLocalProperty(“ spark.scheduler.pool”,)4)每個線程的池ID需要不同
從代碼角度看線程的示例用例:
# set the spark context to use a fair scheduler mode
conf = SparkConf().setMaster(...).setAppName(...)
conf.set("spark.scheduler.mode", "FAIR")
sc = new SparkContext(conf)
# runs a query taking a spark context, pool_id and query..
def runQuery(sc,<POOL_ID>,query):
sc.setLocalProperty("spark.scheduler.pool", pool_id)
.....<your code>
return df
t1 = threading.thread(target=runQuery,args=(sc,"1",<query1>)
t2 = threading.thread(target=runQuery,args=(sc,"2",<query2>)
# start the threads...
t1.start()
t2.sart()
# wait for the threads to complete and get the returned data frames...
df1 = t1.join()
df2 = t2.join()
就像spark文檔指出的那樣,您不會在總體吞吐量上發現任何改進。它適合於多用戶共享資源。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.