我在 dataproc 上創建了一個 7 個節點的集群(1 個主執行器和 6 個執行器。3 個主要執行器和 3 個輔助搶占式執行器)。我可以在控制臺中看到創建的集群已更正。我有所有 6 個 ips 和 VM 名稱。我正在嘗試測驗集群,但似乎代碼沒有在所有執行程式上運行,但最多只有 2 個。以下是我用來檢查執行代碼的執行程式數量的代碼:
import numpy as np
import socket
set(sc.parallelize(range(1,1000000)).map(lambda x : socket.gethostname()).collect())
輸出:
{'monsoon-testing-sw-543d', 'monsoon-testing-sw-p7w7'}
我已經多次重新啟動內核,但是,盡管執行程式更改了執行代碼的執行程式的數量保持不變。
有人可以幫助我理解這里發生了什么以及為什么 pyspark 沒有將我的代碼并行化到所有執行程式嗎?
uj5u.com熱心網友回復:
您有許多執行器要作業,但沒有足夠的資料磁區來處理。您可以numSlices在 parallelize() 方法中添加引數來定義應該創建多少個磁區:
rdd = sc.parallelize(range(1,1000000), numSlices=12)
磁區的數量應該至少等于或大于執行器的數量,以實作最佳的作業分配。
順便說一句:rdd.getNumPartitions()您可以獲得 RDD 中的磁區數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/372257.html
下一篇:串列中數字的頻率-Pyspark
