EMR主节点中的包列表与EMR Notebook中的包列表



我已经启动并运行了一个EMR集群。在它,我有一个Jupyter笔记本与pyspark内核。

对于主节点,我可以将SSH放入其中。我可以很容易地在主节点中安装Python包,例如:

pip install pandas

然后我可以用pip freeze

验证它是否成功然而,当我去pyspark笔记本,使用sc.list_packages(),我看到一个不同的包列表在那里。有些包与主节点中的版本不同。有些包(如pandas)不完全出现

下面是主节点SSHpip freeze的列表。

aws-cfn-bootstrap==2.0
beautifulsoup4==4.9.1
boto==2.49.0
click==7.1.2
Cython==0.29.30
docutils==0.14
jmespath==0.10.0
joblib==0.15.1
lockfile==0.11.0
lxml==4.5.1
mysqlclient==1.4.2
nltk==3.5
nose==1.3.4
numpy==1.21.6
pandas==1.3.5
py-dateutil==2.2
py4j==0.10.9.5
pybind11==2.9.2
pyspark==3.3.0
pystache==0.5.4
python-daemon==2.2.3
python-dateutil==2.8.2
python37-sagemaker-pyspark==1.3.0
pytz==2020.1
PyYAML==5.3.1
regex==2020.6.8
scipy==1.7.3
simplejson==3.2.0
six==1.13.0
soupsieve==1.9.5
tqdm==4.46.1
windmill==1.6

下面是PySpark笔记本中使用sc.list_packages()的包列表:

aws-cfn-bootstrap (2.0)
beautifulsoup4 (4.9.1)
boto (2.49.0)
click (7.1.2)
docutils (0.14)
jmespath (0.10.0)
joblib (0.15.1)
lockfile (0.11.0)
lxml (4.5.1)
mysqlclient (1.4.2)
nltk (3.5)
nose (1.3.4)
numpy (1.16.5)
pip (9.0.1)
py-dateutil (2.2)
pystache (0.5.4)
python-daemon (2.2.3)
python37-sagemaker-pyspark (1.3.0)
pytz (2020.1)
PyYAML (5.3.1)
regex (2020.6.8)
setuptools (28.8.0)
simplejson (3.2.0)
six (1.13.0)
soupsieve (1.9.5)
tqdm (4.46.1)
UNKNOWN (1.3.5)
wheel (0.29.0)
windmill (1.6)
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
You are using pip version 9.0.1, however version 22.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

注意pandas,scipypip是不同的。为什么它们不同?如何升级或更新PySpark笔记本中的列表?

登录主节点,执行命令sudodocker ps -a。你应该看到一个命名为emr/jupyter-notebook:6.0.3的容器,这就是你的Jupyter Notebook运行的地方;它没有在主节点运行。

如果您决定在主节点上安装任何包,Jupyter Notebook将看不到它们。这就是你们的包不匹配的原因。为了在Jupyter Notebook中安装包,我使用了一个需求文件,其中包含我想要安装的包,并调用一个引导操作脚本来安装这些包。一个重要的细节是,如果你指定了一个包的版本,那么它必须被容器中运行的Python版本所支持。要找出答案,只需在Jupyter Notebook中运行一个步骤:

import sys
print(sys.version)

要查找特定Python版本的最新包,我强烈建议使用Anaconda。例如

conda create --name requests python=3.7.9 matplotlib

将告诉我与Python 3.7.9一起工作的matplotlib的最新版本

最新更新