簡體   English   中英

如何在pyspark代碼中創建python線程

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

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