首页 > 解决方案 > 如何在 EMR 笔记本中安装 .jar 依赖项?

问题描述

我正在运行 EMR 笔记本(平台:AWS,笔记本:jupyter,内核:PySpark)。我需要安装一个 .jar 依赖项 ( sparkdl) 来处理一些图像。

使用 Spark-submit,我可以使用:

spark-submit --packages databricks:spark-deep-learning:1.5.0-spark2.4-s_2.11

使用本地笔记本,我可以使用:

spark = (SparkSession
            .config('spark.jars.packages', 'databricks:spark-deep-learning:1.5.0-spark2.4-s_2.11')
            .getOrCreate()
)

但是如何在 EMR 笔记本上做同样的事情呢?

  1. 我可以使用引导程序将其安装在每个节点上。但我不知道该怎么做……</li>
  2. 我可以配置 SparkSession 以使用依赖项。但笔记本似乎无法访问存储库……我也不知道让它加载复制到 S3 存储桶上的文件的语法……</li>

编辑:我试过

%%configure -f
{ "conf":{
          "spark.jars": "s3://p8-fruits/libs/spark-deep-learning-1.5.0-spark2.4-s_2.11.jar"
         }
}

这没有引发任何错误,但我仍然无法使用它。当我尝试import sparkdl时,我得到了ModuleNotFoundError: No module named 'sparkdl'

非常感谢您的帮助 !

标签: pysparkjupyter-notebookdependenciesamazon-emr

解决方案


首先,您可以在魔术spark.jars.packages指令中声明依赖项:configure

%%configure
{ 
    "conf": {
        "spark.jars.packages": "databricks:spark-deep-learning:1.5.0-spark2.4-s_2.11" 
    }
}

对于常见情况,这应该足够了。如果您的 EMR 集群无法访问 jar 存储库,您可能需要手动将 jar 放入 HDFS(假设您有 jar /home/hadoop/libs/

例如

hdfs dfs -put /home/hadoop/libs/spark-deep-learning-1.5.0-spark2.4-s_2.11.jar /libs/spark-deep-learning-1.5.0-spark2.4-s_2.11.jar

jars并在指令中传递它:

%%configure -f
{ 
    "jars": ["/libs/spark-deep-learning-1.5.0-spark2.4-s_2.11.jar"]
}

推荐阅读