我很好奇是怎麼回事底層時使用的多處理模塊將一個函數調用的並行化,並且把它應用到一個熊貓DataFrame沿著行軸。
具體地說,它是如何工作的磚結構/計算。我的集群配置是:
2 - 8的工人
61 - 244 GB Memory8-32 Cores1司機
30.5 GB內存,4 CoresRuntime
12.2.x-scala2.12
例如,在這裏一些示例代碼:
熊貓作為pd導入導入請求多處理導入池#定義API調用函數def api_call(行):反應= requests.get (f 'https: / /api.example.com/?id= {row [" id "]}”)返回response.json() #數據加載到一個熊貓DataFrame data = pd.read_csv (data.csv) #定義的流程使用num_processes = 4 #創建一個對象池來處理並行處理池=池(過程= num_processes) # API調用函數適用於並行DataFrame結果的每一行=池。地圖(api_call[行索引,行data.iterrows())) #結果合並成一個新的DataFrame輸出= pd.DataFrame(結果)#合並輸出DataFrame回原DataFrame data = pd。concat((數據、輸出),軸= 1)
我隻是想了解,引擎蓋下麵會發生什麼呢?
@Keval沙:
當使用多處理模塊在Python函數調用並行化,並且把它應用到一個熊貓DataFrame沿著行軸,以下發生的引擎蓋下麵:
磚的建築,多處理模塊的上下文中工作Python解釋器運行在司機節點。司機節點負責編排數據的並行處理整個工人集群中的節點。每個工作節點的運行一個單獨的實例Python解釋器和分配一部分輸入數據並行處理。然後結果返回給司機節點,在組合和合並回原DataFrame。
值得注意的是,磚也提供了自己的並行處理能力通過使用火花DataFrames抽樣,對分布式計算優化大型數據集。如果您正在使用大數據,它可能是更高效的使用這些Spark-based解決方案而不是
多處理
。