我正在通过以下方法尝试在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文件都在桶中。
发布于 2021-02-26 17:26:18
实际上,解决这一问题的方法是将SSH放入主节点,然后查看常春藤日志:
/mnt/var/log/livy/livy-server.out
和下载的jar文件
/var/lib/livy/.livy 2/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"
}
}https://stackoverflow.com/questions/66387589
复制相似问题