AWS emr driver jars



我试图通过以下方式在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: Failed to find data source: com.databrick .spark.redshift.

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

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

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

和下载的jar文件在

/var/lib/李维/.ivy2/罐/

根据我的发现,我把我的代码改为:

%%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"
}
}

最新更新