Jobs interativos do PySpark em notebooks frequentemente exigem bibliotecas Python de terceiros para processamento e análise de dados. Instale essas bibliotecas usando um dos três métodos disponíveis.
Informações básicas
Durante o desenvolvimento interativo com PySpark, as bibliotecas Python de terceiros oferecem recursos mais flexíveis para processamento e análise de dados. A tabela a seguir compara os três métodos disponíveis.
|
Método |
Casos de uso |
|
Processamento de variáveis não relacionadas ao Spark, como valores de retorno de computações do Spark ou variáveis personalizadas. Importante
As bibliotecas instaladas com este método não persistem entre sessões. Reinstale-as após cada reinício de sessão. |
|
|
Método 2: Configurar um ambiente Python personalizado usando Environments |
Jobs do PySpark que exigem bibliotecas de terceiros pré-instaladas em cada sessão do notebook. |
|
Método 3: Configurar um ambiente Python personalizado usando parâmetros do Spark |
Computação distribuída com PySpark em que as bibliotecas de terceiros precisam estar disponíveis para todos os executores. |
Pré-requisitos
Workspace criado. Para mais informações, consulte Criar um workspace.
Sessão de notebook criada. Para mais informações, consulte Gerenciar sessões de notebook.
Notebook criado. Para mais informações, consulte Desenvolvimento de Notebook.
Procedimento
Método 1: Instalar bibliotecas usando pip
-
Acesse a página de desenvolvimento de notebook.
Faça login no console do E-MapReduce.
No painel de navegação à esquerda, escolha .
Na página Spark, clique no nome do workspace desejado.
Na página EMR Serverless Spark, clique em Development no painel de navegação à esquerda.
Clique duas vezes no notebook criado.
-
Em uma célula Python do notebook, insira o comando a seguir para instalar a biblioteca scikit-learn e clique no ícone Run Cell
.pip install scikit-learn -
Em outra célula Python, insira o código a seguir e clique no ícone Run Cell
.# Import the library and prepare the dataset. from sklearn import datasets # Load a built-in dataset, such as the Iris dataset. iris = datasets.load_iris() X = iris.data # Feature data y = iris.target # Label # Split the dataset. from sklearn.model_selection import train_test_split # Split the data into training and test sets. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Train a support vector machine (SVM) model. from sklearn.svm import SVC # Create a classifier instance. clf = SVC(kernel='linear') # Use a linear kernel. # Train the model. clf.fit(X_train, y_train) # Make predictions with the trained model. y_pred = clf.predict(X_test) # Evaluate model performance. from sklearn.metrics import classification_report, accuracy_score print(classification_report(y_test, y_pred)) print("Accuracy:", accuracy_score(y_test, y_pred))A saída será semelhante à seguinte:
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
Método 2: Configurar um ambiente com Environments
Etapa 1: Criar um ambiente de execução
-
Acesse a página Environments.
Faça login no console do E-MapReduce.
No painel de navegação à esquerda, escolha EMR Serverless > Spark.
Na página Spark, clique no nome do workspace desejado.
Na página EMR Serverless Spark, clique em Environment no painel de navegação à esquerda.
Clique em Create Environment.
-
Na página Create Environment, clique em Add Library.
Para descrições dos parâmetros, consulte Gerenciar ambientes de execução.
-
Na caixa de diálogo New Library, defina Source Type como PyPI, especifique o PyPI Package e clique em OK.
No campo PyPI Package, insira o nome da biblioteca e a versão. Caso nenhuma versão seja especificada, a versão mais recente será instalada. Exemplo:
scikit-learn. -
Clique em create.
Após a criação do ambiente, o sistema inicia a inicialização.
Etapa 2: Usar o ambiente de execução
Pare a sessão antes de editá-la.
-
Acesse a aba Notebook Session.
Na página EMR Serverless Spark, escolha no painel de navegação à esquerda.
Clique na aba Notebook Session.
Na coluna Actions da sessão de notebook desejada, clique em Edit.
Na lista suspensa Environment, selecione o ambiente de execução criado na etapa anterior e clique em Save Changes.
No canto superior direito, clique em START.
Etapa 3: Classificar dados com Scikit-learn
-
Acesse a página de desenvolvimento de notebook.
Na página EMR Serverless Spark, clique em Development no painel de navegação à esquerda.
Clique duas vezes no notebook criado.
-
Em uma célula Python do notebook, insira o código a seguir e clique no ícone Run Cell
.# Import the library and prepare the dataset. from sklearn import datasets # Load a built-in dataset, such as the Iris dataset. iris = datasets.load_iris() X = iris.data # Feature data y = iris.target # Label # Split the dataset. from sklearn.model_selection import train_test_split # Split the data into training and test sets. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Train a support vector machine (SVM) model. from sklearn.svm import SVC # Create a classifier instance. clf = SVC(kernel='linear') # Use a linear kernel. # Train the model. clf.fit(X_train, y_train) # Make predictions with the trained model. y_pred = clf.predict(X_test) # Evaluate model performance. from sklearn.metrics import classification_report, accuracy_score print(classification_report(y_test, y_pred)) print("Accuracy:", accuracy_score(y_test, y_pred))
Método 3: Configurar um ambiente com parâmetros do Spark
Este método requer ipykernel 6.29 ou posterior, jupyter_client 8.6 ou posterior e Python 3.8 ou posterior. Empacote o ambiente em um sistema Linux com arquitetura x86.
Etapa 1: Compilar e implantar um ambiente conda
-
Execute os comandos a seguir para instalar o 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 -
Compile um ambiente conda que utilize Python 3.8 e numpy.
# Create and activate the conda environment. conda create -y -n pyspark_conda_env python=3.8 conda activate pyspark_conda_env # Install third-party libraries. pip install numpy \ ipykernel~=6.29 \ jupyter_client~=8.6 \ jieba \ conda-pack # Pack the environment. conda pack -f -o pyspark_conda_env.tar.gz
Etapa 2: Carregar arquivo de recurso no OSS
Carregue o arquivo pyspark_conda_env.tar.gz empacotado no Alibaba Cloud OSS e anote o caminho completo do OSS. Para mais informações, consulte Upload Simples.
Etapa 3: Configurar e iniciar a sessão do notebook
Pare a sessão antes de editá-la.
-
Acesse a aba Notebook Session.
Na página EMR Serverless Spark, escolha no painel de navegação à esquerda.
Clique na aba Notebook Session.
Na coluna Actions da sessão de notebook desejada, clique em Edit.
-
Na seção Spark Configuration, adicione as configurações a seguir e clique em Save Changes.
spark.archives oss://<yourBucket>/path/to/pyspark_conda_env.tar.gz#env spark.pyspark.python ./env/bin/pythonNotaNa configuração, substitua
<yourBucket>/path/topelo caminho real de upload no OSS. No canto superior direito, clique em START.
Etapa 4: Processar dados de texto com Jieba
Jieba é uma biblioteca Python de terceiros para segmentação de texto em chinês. Para informações sobre sua licença de código aberto, consulte LICENSE.
-
Acesse a página de desenvolvimento de notebook.
Na página EMR Serverless Spark, clique em Development no painel de navegação à esquerda.
Clique duas vezes no notebook criado.
-
Em uma nova célula Python, insira o comando a seguir para segmentar palavras em chinês usando Jieba e clique no ícone Run Cell
.import jieba strs = ["EMRServerlessSpark是一款专为大规模数据处理与分析而打造的全托管Serverless产品", "为您提供了高效的任务开发调试调度以及运维等一站式服务", "EMRServerlessSpark实现了资源调度和根据任务负载进行动态扩展"] sc.parallelize(strs).flatMap(lambda s: jieba.cut(s, use_paddle=True)).collect()O comando retorna o seguinte resultado:
import jieba strs = ["EMRServerlessSpark是一款专为大规模数据处理与分析而打造的全托管Serverless产品", "为您提供了高效的任务开发调试调度以及运维等一站式服务", "EMRServerlessSpark实现了资源调度和根据任务负载进行动态扩展..."] sc.parallelize(strs).flatMap(lambda s: jieba.cut(s, use_paddle=True)).collect() ['EMRServerlessSpark', '是', '一款', '专', '为', '大规模', '数据处理', '与', '分析', '而', '打造', '的', '全', '托管', 'Serverless', '产品', '为', '您', '提供', '了', '高效', '的', '任务', '开发', '调试', '调度', '以及', '运维', '等', '一站式', '服务', 'EMRServerlessSpark', '实现', '了', '资源', '调度', '和', '根据', '任务', '负载', '进行', '动态', '扩展']