如何在EMR笔记本中安装.jar依赖项?

时间:2019-12-17 10:54:31

标签: pyspark jupyter-notebook dependencies amazon-emr

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

使用Spark提交,我可以使用:

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. 我可以使用引导程序将其安装在每个节点上。但我不知道该如何进行...
  2. 我可以将SparkSession配置为使用依赖项。但是笔记本似乎无法访问存储库...我也不知道使它加载复制到S3存储桶上的文件的语法...

编辑: 我尝试过

%%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'

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,您可以在 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"]
}