AWS EMR Notebook调用list_packages报SparkContext无属性错误求解
报错原因定位
你使用的emr-5.20.0版本对应Spark 2.4.0,list_packages()是Spark 3.0.0及以上版本才新增的PySpark SparkContext API,你参照的AWS官方方案默认适配更高版本的EMR集群(对应Spark 3.x),直接在低版本环境执行就会触发属性不存在的报错。
适配Spark 2.4.0的操作方案
- 查看当前Notebook会话已安装的Python包
直接执行shell命令即可:
如果需要查看集群全局加载的Jar包,可执行如下代码:!pip listsc._jsc.sc().listJars() - 临时为当前会话安装Python包
Spark 2.4.0支持install_pypi_packageAPI完成临时包安装,安装的包仅在当前Notebook会话生效:# 安装指定包,示例安装pandas 1.1.5版本 sc.install_pypi_package("pandas==1.1.5") # 卸载指定包 sc.uninstall_package("pandas") - 永久为集群安装包
如需所有集群任务都可以调用对应包,可在创建EMR集群时添加Bootstrap引导脚本,在所有核心节点、任务节点的Python环境中预安装需要的依赖包。
修正后的测试代码
from pyspark.sql import SparkSession from pyspark import SparkConf, SparkContext spark = SparkSession.builder.getOrCreate() sc = SparkContext.getOrCreate() # 临时安装示例包 sc.install_pypi_package("requests") # 验证安装结果 !pip show requests
内容的提问来源于stack exchange,提问作者Balamurugan P
相关产品推荐
相关产品推荐

