【问题标题】:AWS emr driver jarsAWS emr 驱动程序 jar
【发布时间】:2021-02-27 01:26:18
【问题描述】:

我正在尝试通过以下方式在 pyspark 笔记本上使用 AWS EMR 5.29 中的外部驱动程序:

#%%configure -f
{ "conf": {"spark.jars":"s3://bucket/spark-redshift_2.10-2.0.1.jar,"
                        "s3://bucket/minimal-json-0.9.5.jar,"
                        "s3://bucket/spark-avro_2.11-3.0.0.jar,"
                        "s3://bucket/RedshiftJDBC4-no-awssdk-1.2.41.1065.jar"}}

根据https://blog.benthem.io/2020/04/21/connect-aws-emr-to-spark.html

但是,在尝试时

from pyspark.sql import SQLContext

sc = spark # existing SparkContext
sql_context = SQLContext(sc)

df = sql_context.read.format("com.databricks.spark.redshift")\
                                    .option("url", jdbcUrl)\
                                    .option("query","select * from test")\
                                    .option("tempdir", "s3://")\
                                    .load()

我明白了 : java.lang.ClassNotFoundException: 找不到数据源: com.databricks.spark.redshift.

我该如何解决这个问题?我可以确认 emr 角色有权访问存储桶,因为我可以使用 spark 在同一个存储桶上处理 CSV 文件。我还可以确认所有列出的 jar 文件都在存储桶中。

【问题讨论】:

    标签: amazon-web-services apache-spark pyspark amazon-emr


    【解决方案1】:

    实际上解决这个问题的方法是通过 SSH 连接到主节点,然后查看 ivy 日志:

    /mnt/var/log/livy/livy-livy-server.out

    和下载的jar文件在

    /var/lib/livy/.ivy2/jars/

    根据我发现的情况,我将代码更改为:

    %%configure -f
    {
        "conf": {
            "spark.jars" : "s3://bucket/RedshiftJDBC4-no-awssdk-1.2.41.1065.jar",
            "spark.jars.packages": "com.databricks:spark-redshift_2.10:2.0.0,org.apache.spark:spark-avro_2.11:2.4.0,com.eclipsesource.minimal-json:minimal-json:0.9.4"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2017-07-30
      • 2016-07-30
      • 2017-07-06
      • 1970-01-01
      • 2016-05-14
      • 2015-12-21
      • 1970-01-01
      • 2016-08-13
      相关资源
      最近更新 更多