如何管理Python PySpark依賴性
2020年12月22日 在工程的博客
控製應用程序的環境通常是具有挑戰性的在分布式計算環境中,很難確保所有節點來執行所需的環境,它可能很難知道用戶的實際運行代碼,等等。
Apache火花™提供了一些標準方法在集群中的節點管理依賴性通過腳本選項等——罐子
,——包
和配置等spark.jars。*
讓用戶無縫管理集群的依賴關係。
相比之下,PySpark用戶經常問怎麼做Python依賴性——已經有多個問題等火星- 13587,火星- 16367,火星- 20001和火星- 25433。一個簡單的例子,說明了依賴關係管理場景是當用戶運行熊貓udf。
進口熊貓作為pd從pyspark.sql.functions進口pandas_udf@pandas_udf (“雙”)defpandas_plus_one(v: pd.Series)- > pd.Series:返回v +1火花。範圍(10).select (pandas_plus_one (“id”)),告訴()
如果他們不需要依賴安裝在所有其他節點,不能抱怨PyArrow和熊貓必須安裝。
回溯(最近調用去年):…ModuleNotFoundError:沒有模塊命名“pyarrow”
一個簡單的方法是使用腳本選項等——py-files
或者是spark.submit.pyFiles
配置,但是這個功能不能覆蓋許多情況下,如安裝輪文件或當Python庫依賴C和c++庫pyarrow和NumPy等。
這篇文章介紹了如何控製Python在Apache引發全麵的依賴關係。大部分的內容也將記錄在即將到來的Apache火花3.1的一部分項目禪。請參考更新項目戰:改善Apache為Python用戶火花為更多的細節。
使用Conda
Conda是一種最廣泛使用的Python包管理係統。PySpark Conda環境用戶可以直接使用船舶通過利用第三方Python包conda-pack這是一個命令行工具創建浮動Conda環境。在所有類型的集群支持即將到來的Apache 3.1火花。在Apache火花3.0或更低版本中,可以使用它隻有紗。
下麵的示例創建一個Conda環境使用驅動程序和執行程序和包存檔文件。這個存檔文件捕獲Python和商店都Python解釋器的Conda環境及其所有相關的依賴關係。
conda創建- - - - - -y- - - - - -n pyspark_conda_env- - - - - -c conda- - - - - -打造pyarrow熊貓conda- - - - - -包conda激活pyspark_conda_envconda包- - - - - -f- - - - - -o pyspark_conda_env.tar.gz
之後,你可以一起船腳本或代碼中使用——檔案
選擇或spark.archives
配置(spark.yarn.dist.archives
在紗線)。它會自動解包檔案執行人。
在的情況下spark-submit
腳本中,您可以使用它如下:
出口PYSPARK_DRIVER_PYTHON = python#不要在集群模式。出口PYSPARK_PYTHON =。/環境/本python /spark-submit——檔案pyspark_conda_env.tar.gz#環境app.py
請注意,PYSPARK_DRIVER_PYTHON
以上不應設置在紗或Kubernetes集群模式。
對於一個pyspark
外殼:
出口python PYSPARK_DRIVER_PYTHON =出口PYSPARK_PYTHON =。/環境/ bin / pythonpyspark——檔案pyspark_conda_env.tar.gz #環境
如果你在一個常規的Python shell或筆記本,你可以試試如下所示:
進口操作係統從pyspark.sql進口SparkSessionos.environ [“PYSPARK_PYTHON”]=”。/環境/ bin / python”火花= SparkSession.builder.config (“spark.archives”,#“spark.yarn.dist.archives”在紗線。“pyspark_conda_env.tar.gz #環境”).getOrCreate ()
使用Virtualenv
Virtualenv是一個Python工具創建獨立的Python環境。由於Python 3.3,其特性的一個子集被集成到Python標準庫下venv模塊。在即將到來的Apache 3.1火花,PySpark用戶可以使用virtualenv管理集群中使用Python依賴性venv-pack以類似的方式conda-pack。在Apache 3.0火花和更低的版本中,可以使用它隻有紗。
虛擬環境使用驅動程序和執行程序可以創建如下演示。它包當前虛擬環境到一個存檔文件,它包含Python解釋器和依賴關係。然而,它需要在一個集群中所有節點具有相同的Python解釋器因為venv-pack包安裝Python解釋器是一個符號鏈接。
python - m venv pyspark_venv源pyspark_venv /本/激活pip安裝pyarrow熊貓venv-packvenv-pack - o pyspark_venv.tar.gz
你可以直接通過/解壓存檔文件,使執行器利用環境——檔案
選擇或spark.archives
配置(spark.yarn.dist.archives
在紗線)。
為spark-submit
,您可以使用它通過運行命令如下。另外,請注意PYSPARK_DRIVER_PYTHON
在集群Kubernetes或紗線必須設置模式。
出口PYSPARK_DRIVER_PYTHON = python#不要在集群模式。出口PYSPARK_PYTHON =。/環境/本python /spark-submit——檔案pyspark_venv.tar.gz#環境app.py
在的情況下pyspark
外殼:
出口python PYSPARK_DRIVER_PYTHON =出口PYSPARK_PYTHON =。/環境/ bin / pythonpyspark——檔案pyspark_venv.tar.gz #環境
常規的Python shell或筆記本:
進口操作係統從pyspark.sql進口SparkSessionos.environ [“PYSPARK_PYTHON”]=”。/環境/ bin / python”火花= SparkSession.builder.config (“spark.archives”,#“spark.yarn.dist.archives”在紗線。“pyspark_venv.tar.gz #環境”).getOrCreate ()
使用PEX
PySpark還可以使用PEX船Python包在一起。PEX Python是一個工具,創建一個獨立的環境。這類似於Conda或virtualenv,但.pex
文件是可執行的。
下麵的示例創建一個.pex
文件要使用的驅動程序和執行程序。與指定的文件包含Python依賴性pex
命令。
pip安裝pyarrow熊貓pexpex pyspark pyarrow熊貓- o pyspark_pex_env.pex
這個文件行為類似於普通Python解釋器。
/ pyspark_pex_env。pex - c“進口熊貓;打印(pandas.__version__)”1.1。5
然而,.pex
文件不包含Python解釋器引擎蓋下麵所以集群中的所有節點應該有相同的安裝Python解釋器。
為了傳輸和使用.pex
文件在一個集群中,您應該通過船spark.files
配置(spark.yarn.dist.files
在紗線)或——文件
選擇,因為他們是普通文件的目錄或檔案文件。
對於申請提交,您運行的命令如下所示。PYSPARK_DRIVER_PYTHON
不應設置在紗或Kubernetes集群模式。
出口python PYSPARK_DRIVER_PYTHON = #不設置在集群模式。出口PYSPARK_PYTHON =。/ pyspark_pex_env.pexspark-submit pyspark_pex_env——文件。pex app.py
的互動pyspark
殼牌的命令幾乎是一樣的:
出口python PYSPARK_DRIVER_PYTHON =出口PYSPARK_PYTHON =。/ pyspark_pex_env.pexpyspark pyspark_pex_env.pex——文件
常規的Python shell或筆記本:
進口操作係統從pyspark.sql進口SparkSessionos.environ [“PYSPARK_PYTHON”]=”。/ pyspark_pex_env.pex”火花= SparkSession.builder.config (“spark.files”,#“spark.yarn.dist.files”在紗線。“pyspark_pex_env.pex”).getOrCreate ()
結論
在Apache火花,Conda virtualenv PEX可用於船和管理Python依賴性。
- Conda:這是一種最常用的包管理係統。在Apache 3.0和火花低版本,Conda隻能支持紗集群,它與所有其他集群類型在即將到來的Apache 3.1火花。
- Virtualenv:用戶可以不用額外安裝,因為它是一個內置的圖書館在Python中,但應該有相同的Python安裝在所有節點而Conda並不需要它。Virtualenv隻能與紗線集群在Apache 3.0火花和更低的版本,和所有其他集群類型支持即將到來的Apache火花3.1。
- PEX:它可以用於任何類型的集群在任何版本的Apache火花少雖然可以說是廣泛使用,需要在所有節點具有相同的Python安裝而Conda並不需要它。
這些包管理係統可以處理任何Python包——py-files
或spark.submit.pyFiles
配置不能覆蓋。用戶可以無縫地船不僅大熊貓和其他PyArrow還依賴與PySpark時一起互動。
在磚筆記本的情況下,我們不僅提供了一個優雅的機製通過一個精心設計的UI也允許用戶直接使用pip和Conda為了解決這個Python依賴關係管理。嚐試這些今天免費磚。