在Notebook中執行互動式PySpark任務時往往需要藉助Python第三方庫來增強資料處理和分析能力。本文將以三種方式為您介紹如何在Notebook中安裝Python第三方庫。
背景資訊
在互動式PySpark開發過程中,可以使用Python第三方庫以提升資料處理與分析的靈活性及易用性。以下三種方式均能協助您實現這一目標,建議根據實際情況選擇最適合的方式。
|
方式 |
適用情境 |
|
在Notebook中處理與Spark無關的變數,例如處理通過Spark計算得到的傳回值或是自訂的變數等。 重要
重啟Notebook會話後需要重新安裝這些庫。 |
|
|
需要在PySpark中使用Python第三方庫處理資料,且希望Notebook會話在每次啟動時都能預設預裝這些第三方庫。 |
|
|
需要在PySpark中使用Python第三方庫處理資料的情境,例如使用Python第三方庫進行Spark分散式運算。 |
前提條件
-
已建立工作空間,詳情請參見建立工作空間。
-
已建立Notebook會話,詳情請參見管理Notebook會話。
-
已建立Notebook開發,詳情請參見Notebook開發。
操作流程
方式一:使用pip安裝Python庫
-
進入Notebook開發頁面。
-
在左側導覽列,選擇。
-
在Spark頁面,單擊目標工作空間名稱。
-
在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发。
-
雙擊已建立的Notebook開發。
-
在一個Notebook的Python儲存格中,輸入以下命令安裝scikit-learn庫,然後單擊
表徵圖。pip install scikit-learn -
在一個Notebook的Python儲存格中,輸入以下命令,然後單擊
表徵圖。# 匯入庫並準備相關資料集。 from sklearn import datasets # 載入內建的資料集,例如Iris資料集。 iris = datasets.load_iris() X = iris.data # 特徵資料 y = iris.target # 標籤 # 劃分資料集。 from sklearn.model_selection import train_test_split # 劃分訓練集和測試集。 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 使用向量機模型進行訓練。 from sklearn.svm import SVC # 建立分類器執行個體。 clf = SVC(kernel='linear') # 使用線性核。 # 訓練模型。 clf.fit(X_train, y_train) # 使用訓練好的模型進行預測。 y_pred = clf.predict(X_test) # 評估模型效能。 from sklearn.metrics import classification_report, accuracy_score print(classification_report(y_test, y_pred)) print("Accuracy:", accuracy_score(y_test, y_pred))執行結果如下所示。
precision recall f1-score support 0 1.00 1.00 1.00 19 1 1.00 1.00 1.00 13 2 1.00 1.00 1.00 13 accuracy 1.00 45 macro avg 1.00 1.00 1.00 45 weighted avg 1.00 1.00 1.00 45 Accuracy: 1.0
方式二:通過運行環境管理配置自訂Python環境
步驟一:建立運行環境
-
進入運行環境管理頁面。
-
在左側導覽列,選擇EMR Serverless > Spark。
-
在Spark頁面,單擊目標工作空間名稱。
-
在EMR Serverless Spark頁面,選擇左側導覽列中的运行环境管理。
-
單擊创建运行环境。
-
在创建运行环境頁面,單擊添加库。
更多參數資訊,請參見管理運行環境。
-
在新建库中,使用PyPI來源類型,配置PyPI Package參數,然後單擊确定。
在PyPI Package中填寫庫的名稱及版本,不指定版本時,預設安裝最新版本。例如,
scikit-learn。 -
單擊创建。
建立後將開始初始化環境。
步驟二:使用運行環境
在編輯會話之前,您需要先停止會話。
-
進入Notebook會話頁簽。
-
在EMR Serverless Spark頁面,選擇左側導覽列中的。
-
單擊Notebook 会话頁簽。
-
-
單擊目標Notebook會話操作列的编辑。
-
在运行环境下拉式清單中選擇前一步驟建立的運行環境,單擊保存更改。
-
單擊右上方的启动。
步驟三:利用Scikit-learn庫進行資料分類
-
進入Notebook開發頁面。
-
在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发。
-
雙擊已建立的Notebook開發。
-
-
在一個Notebook的Python儲存格中,輸入以下命令,然後單擊
表徵圖。# 匯入庫並準備相關資料集。 from sklearn import datasets # 載入內建的資料集,例如Iris資料集。 iris = datasets.load_iris() X = iris.data # 特徵資料 y = iris.target # 標籤 # 劃分資料集。 from sklearn.model_selection import train_test_split # 劃分訓練集和測試集。 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 使用向量機模型進行訓練。 from sklearn.svm import SVC # 建立分類器執行個體。 clf = SVC(kernel='linear') # 使用線性核。 # 訓練模型。 clf.fit(X_train, y_train) # 使用訓練好的模型進行預測。 y_pred = clf.predict(X_test) # 評估模型效能。 from sklearn.metrics import classification_report, accuracy_score print(classification_report(y_test, y_pred)) print("Accuracy:", accuracy_score(y_test, y_pred))
方式三:通過Spark參數配置自訂Python環境
在使用該方式時,需確保已安裝ipykernel和jupyter_client,並且ipykernel的版本應不低於6.29,jupyter_client的版本應不低於8.6,Python版本需不低於3.8,且需在Linux環境(需為x86架構)下進行打包。
步驟一:Conda環境構建與部署
-
通過以下命令安裝Miniconda。
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh -b source miniconda3/bin/activate -
構建使用Python 3.8和numpy的Conda環境。
# 建立並啟用conda環境 conda create -y -n pyspark_conda_env python=3.8 conda activate pyspark_conda_env # 安裝第三方庫 pip install numpy \ ipykernel~=6.29 \ jupyter_client~=8.6 \ jieba \ conda-pack # 打包環境 conda pack -f -o pyspark_conda_env.tar.gz
步驟二:上傳資源檔至OSS
上傳打包好的pyspark_conda_env.tar.gz至阿里雲OSS,並記錄下完整的OSS路徑,上傳操作可以參見簡單上傳。
步驟三:配置並啟動Notebook會話
在編輯會話之前,您需要先停止會話。
-
進入Notebook會話頁簽。
-
在EMR Serverless Spark頁面,選擇左側導覽列中的。
-
單擊Notebook 会话頁簽。
-
-
單擊目標Notebook會話操作列的编辑。
-
在Spark 配置中,添加以下配置資訊,單擊保存更改。
spark.archives oss://<yourBucket>/path/to/pyspark_conda_env.tar.gz#env spark.pyspark.python ./env/bin/python說明配置中的
<yourBucket>/path/to,請替換為您實際的OSS上傳路徑。 -
單擊右上方的启动。
步驟四:利用Jieba分詞處理文本資料
Jieba是一個中文文本分詞Python第三方庫,其開源許可證請參見LICENSE。
-
進入Notebook開發頁面。
-
在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发。
-
雙擊已建立的Notebook開發。
-
-
在新的一個Python儲存格中,輸入以下命令以使用Jieba進行中文分詞,然後單擊
表徵圖。import jieba strs = ["EMRServerlessSpark是一款專為大規模資料處理與分析而打造的全託管Serverless產品", "為您提供了高效的任務開發調試調度以及營運等一站式服務", "EMRServerlessSpark實現了資源調度和根據任務負載進行動態擴充"] sc.parallelize(strs).flatMap(lambda s: jieba.cut(s, use_paddle=True)).collect()執行結果如下所示。
import jieba strs = ["EMRServerlessSpark是一款專為大規模資料處理與分析而打造的全託管Serverless產品", "為您提供了高效的任務開發調試調度以及營運等一站式服務", "EMRServerlessSpark實現了資源調度和根據任務..."] sc.parallelize(strs).flatMap(lambda s: jieba.cut(s, use_paddle=True)).collect() ['EMRServerlessSpark', '是', '一款', '專', '為', '大規模', '資料處理', '與', '分析', '而', '打造', '的', '全', '託管', 'Serverless', '產品', '為', '您', '提供', '了', '高效', '的', '任務', '開發', '調試', '調度', '以及', '營運', '等', '一站式', '服務', 'EMRServerlessSpark', '實現', '了', '資源', '調度', '和', '根據', '任務', '參數', '進行', '彈態', '擴充']