取消
顯示的結果
而不是尋找
你的意思是:
ogdendc
新的貢獻者三世
新的貢獻者三世

降低成本。提高生產力。生產高質量的工作。你隻需要當心for循環。為什麼?

腳本是否在Python中,R, Scala等…for循環在任何程序員的工具箱是一個偉大的工具。然而……

有一個陰險的類型的for循環

在處理大數據時,有一個陰險的類型的循環;一個耗時和昂貴的類型的for循環。這個博客的目的是提高意識,同時也提供一些同樣有效,快得多,因此更少的昂貴的替代品。乍一看,一個很無辜的代碼塊;但是如果你有在你的程序是這樣的:

ogdendc_0 - 1687469041766. - png

對一些人來說…你可能有潛力巨大的減少運行時。

對任何一個編碼的背景,寫“循環”是一種常見的做法。一個循環是一個迭代過程,重複的代碼塊。這樣一個編程工具有許多應用程序。我使用Fortran(是的,Fortran)長大,不能計算循環的數量我在大學中寫道。也就是說,編寫循環被燒到我心理在我開始編程專業之前,我不能動搖我的衝動與循環代碼。在我的職業生涯中,我做了大量代碼來處理大量的數據;這是涉及大量的循環。隨著時間的推移,我學會了新的編程和腳本語言和發現自己經常使用循環。在我的工作,我與許多客戶互動,有時導致我看到他們的代碼。beplay体育app下载地址我看到的是世界上很多for循環。很多。

並行處理是至關重要的

問題是:一個for循環串行(不是平行)的過程。為什麼這很重要?在我們的勇敢新世界越來越大的數據,可以這麼說平行處理是至關重要的。如果你在世界的工作數據,然後串行處理可能沒問題。還是它?和我一起工作的一些客戶編beplay体育app下载地址寫代碼來處理可能被認為是小數據,然而,通常是使用工具建立專門處理大數據;他們困惑的是為什麼他們的循環運行幾個小時,而不是幾分鍾。我和幾個顧客,在麵對這種情況下,設法解決它通過簡單beplay体育app下载地址地把更強大的計算(集群機器的處理器和內存)在長時間運行的for循環,和困惑的時候更多的計算能力並不能真正解決問題。

為了說明這個問題,假設您有一個代碼塊,你想使用for循環重複一千次,,每次迭代運行一分鍾。一千連續(串行)分鍾有點不到17個小時。現在假設你想減少運行時間,把更強大的計算在這個過程;假設更強大的計算都要強大得多,削減一分鍾運行時間10秒(每迭代)。這是一個顯著減少。這將把17小時變成接近三個小時。但是如果三個小時仍然太長呢?然後如何運行時(在這個假設的例子)以幾分鍾而不是幾小時?答案可能放棄並行循環和擁抱的力量處理。

數據工程師和科學家應對大量的數據,是一種很常見的工具把黨Apache火花®。火花的一個超級大國是其內在能力促進跨集群的分布計算的機器。但火花並不把串行循環,並自動把它變成分布式並行處理(我可能預示新功能在未來版本的火花)。目前,如果你把一個for循環在火花,你仍然有一個連續的迭代處理代碼。

讓我們回到假想的for循環,上麵所描述的那樣,在每次迭代時迭代一千次運行一分鍾。而不是把更強大的計算,如果我們不是想出如何重寫代碼,這樣它可以並行運行這些周期嗎?在極端情況下,所有千周期可以並行運行,導致總運行時間接近一分鍾(而不是17小時)。這可能聽起來極端,但這級的改進並行和串行處理……這種區別是巨大的。

是什麼陰險的類型的循環?一個遍曆的行子集dataframe,和獨立處理每個子集。dataframe例如,假設一列是“地理”,表明不同位置的零售公司。共同使用一個for循環將遍曆每個地區和每個地理分別處理數據。申請這樣的方法有很多。例如,我們可能想要構建特定於每個地區的需求預測模型。如何有效地產生這樣的細粒度預測的詳細信息可以在這個磚解決方案加速器:鏈接

熊貓是防止並行處理

有一個常見的反對意見或關注,我聽說,對現有non-parallelized處理轉化為更“sparkified”:當客戶或同事使用熊貓,和知道熊貓不是一個分布式計算方案,反對是缺乏對重寫現有的代碼從熊貓火花(無熊貓)。放心,使用熊貓站在你的方式並行的過程。這是附帶的代碼中演示了(鏈接到下麵附帶的代碼)。

附帶的代碼演示了for循環的陰險的類型(遍曆數據子集和獨立處理每個子集),同時也證明更快的替代方法,由於火花的並行處理能力。這四個方法相比:迭代循環方法,groupBy.applyinPandas方法,從ThreadPoolExecutor方法concurrent.futures和PySpark(熊貓)的方法。以下圖表描繪了一個運行時的比較四種方法評估:

6-24-23 3.00 PM.jpeg形象

降低成本,同時提高生產力

更快的處理為何如此重要?這可能看起來像一個反問,但往往是一個被忽視方麵為什麼更快的處理是很重要的。明顯的答案成本。當你運行你的代碼和支付計算,為什麼當你隻能支付支付小時分鍾或秒?如果你有一個生產運行工作,每天晚上,和運行成本,大大減少運行時間的好處是顯而易見的。但是還有另一個對這個問題的回答為什麼更快運行時更好,這就是增加員工生產力。也許快並行處理的最大的好處是它如何進一步為人類的能力開發的代碼。無論你是編寫代碼來建立數據和產生通知結果,機器學習或培訓增值業務決策模型,有一個迭代特性的發展過程。迭代、學習提高,重申一下,了解更多,提高更多,等。每一次迭代中,我們學習和改善的方法。更多的周期,我們可以運行在一天,迭代開發邏輯和代碼,越快我們可以改進我們的方法。換句話說,更快的運行時間不僅意味著更低的成本,但也意味著增加員工的生產力;這通常會導致更高質量的工作產品。

降低成本。增加生產力。更高質量的工作產品。
你隻需要當心for循環

for循環是一個偉大的工具

我愛for循環,將繼續定期使用它們。for循環是一個偉大的工具。有許多應用程序的for循環的“陰險”品種。但是如果你使用一個for循環遍曆數據的子集,並獨立處理每個子集,然後你的方法可能會受益於一些“sparkification”見這陪同代碼

在磚,我們所做的一切都是為了使我們的客戶以閃電般的數據和人工智能應用程序。beplay体育app下载地址是否通過技巧的這樣的一個博客,或通過我們world-record-setting查詢性能,我們願與您的團隊,從而降低成本,提高生產率。關於這篇文章的更多信息,請聯係作者通過磚社區。關於磚的更多信息,請聯係一個磚代表通過//www.eheci.com/company/contact

由大衛·c·奧格登的解決方案架構師磚

特別感謝我的評論:Rafi Kurlansik鉛磚產品專家
蘇米特薩拉斯瓦特解決方案架構師磚
免責聲明:意見、想法和建議所共享這些作者的孤獨;,不應被視為從磚背書。

2的評論
dplante
新的貢獻者三世

好的文章!肯定會與同事分享!

外賣的關鍵是使用正確的工具工作,正確使用工具——當你不,這將是非常昂貴的。

這將是偉大的在運行時分析工作運行時間越長,給警告代碼是低效的

ogdendc
新的貢獻者三世
新的貢獻者三世

謝謝你!@dplante。也許你的想法有一個自動效率分析你的代碼將一個新特性LakehouseIQ有一天。不會,很酷!

Baidu
map