庫失敗,依賴項異常

了解為什麼筆記本範圍的庫會觸發Apache Spark依賴異常;返回一個要求不能滿足的錯誤。

寫的jordan.hicks

最後發布日期:2022年5月11日

問題

您有一個定義在自定義egg或wheel文件中的Python函數,它還具有由安裝在集群上的另一個客戶包滿足的依賴關係。

當您調用此函數時,它將返回一個錯誤,表示無法滿足需求。

org.apache.spark.SparkException: Process List(/local_disk0/pythonVirtualEnvDirs/virtualEnv-d82b31df-1da3-4ee9-864d-8d1fce09c09b/bin/python, /local_disk0/pythonVirtualEnvDirs/virtualEnv-d82b31df-1da3-4ee9-864d-8d1fce09c09b/bin/pip, install, fractal==0.1.0,——disable-pip-version-check) exited with code 1。無法找到滿足要求的版本分形==0.1.0(來自版本:0.1.1,0.1.2,0.2.1,0.2.2,0.2.3,0.2.4,0.2.5,0.2.6,0.2.7,0.2.8,0.2.9,0.3.0)

例如,假設您同時安裝了輪子A和輪子B,要麼通過UI安裝到集群,要麼通過筆記本範圍的庫安裝到集群。假設A輪依賴於B輪。

  • dbutils.library.install (/ path_to_wheel / A.whl)
  • dbutils.library.install (/ path_to_wheel / B.whl)

當您嚐試使用這些庫之一進行調用時,會得到一個“需求不能滿足”錯誤。

導致

即使通過集群UI或筆記本範圍的庫安裝安裝所需的依賴項已經滿足了需求,Databricks也不能保證特定庫在集群上的安裝順序。如果一個庫正在被引用,而且它還沒有被分發到執行器節點,那麼它將回退到PyPI,並在本地使用它來滿足需求。

解決方案

您應該使用一個包含所有必需代碼和依賴項的egg或wheel文件。這確保您的代碼在運行時加載了正確的庫並可用。