圖書館失敗,依賴性異常

了解為什麼筆記本電腦分割的庫觸發Apache Spark依賴性異常;返回要求無法滿足錯誤。

寫的喬丹

上次出版於:2022年5月11日

問題

您具有在自定義雞蛋或輪轂文件中定義的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),由代碼1退出。找不到滿足需求fractal == 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和Wheel B,要麼通過UI或通過筆記本電腦分割的庫安裝到群集上。假設車輪A對車輪B有依賴性。

  • dbutils.library.install(/path_to_wheel/a.whl)
  • dbutils.library.install(/path_to_wheel/b.whl)

當您嚐試使用這些庫之一撥打電話時,您將獲得要求無法滿足錯誤。

原因

即使通過群集UI或通過筆記本庫庫安裝安裝所需的依賴項來滿足要求,Databricks也無法保證在集群上安裝特定庫的順序。如果正在引用庫,並且尚未將其分發給執行器節點,則它將退回到PYPI並在本地使用它來滿足要求。

解決方案

您應該使用一個包含所有必需的代碼和依賴項的雞蛋或輪檔。這樣可以確保您的代碼在運行時加載並提供正確的庫。