跳轉到主要內容
工程的博客

如何管理Python PySpark依賴性

通過Hyukjin Kwon

2020年12月22日 工程的博客

分享這篇文章

控製應用程序的環境通常是具有挑戰性的在分布式計算環境中,很難確保所有節點來執行所需的環境,它可能很難知道用戶的實際運行代碼,等等。

Apache火花™提供了一些標準方法在集群中的節點管理依賴性通過腳本選項等——罐子,——包和配置等spark.jars。*讓用戶無縫管理集群的依賴關係。

相比之下,PySpark用戶經常問怎麼做Python依賴性——已經有多個問題等火星- 13587,火星- 16367,火星- 20001火星- 25433。一個簡單的例子,說明了依賴關係管理場景是當用戶運行熊貓udf。

進口熊貓作為pdpyspark.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-filesspark.submit.pyFiles配置不能覆蓋。用戶可以無縫地船不僅大熊貓和其他PyArrow還依賴與PySpark時一起互動。

在磚筆記本的情況下,我們不僅提供了一個優雅的機製通過一個精心設計的UI也允許用戶直接使用pip和Conda為了解決這個Python依賴關係管理。嚐試這些今天免費磚

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map