我有一个数据框,我试图将其写入红移表。我已经提供了所有身份验证凭据,以便从Spark连接到redshift和S3。 以下是代码。
joinedDf.registerTempTable("mytable1")
jdbcURL = "jdbc:redshift://server:port/db?user=username&password=password"
tempS3Dir = "s3://bucket url"
sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "Access KEY ID")
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "Secret Access KEY")
spark.sql("SELECT * FROM mytable1") \
.write \
.format("com.databricks.spark.redshift") \
.option("url", jdbcURL) \
.option("tempdir", tempS3Dir) \
.option("dbtable", "mytable") \
.option("aws_iam_role", "arn of RedShift") \
.mode('append') \
.save()
但是,我收到以下错误:
Caused by: java.lang.ClassNotFoundException: Class com.amazon.ws.emr.hadoop.fs.EmrFileSystem not found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193)
... 35 more
似乎问题是缺少jar,但是,在启动spark应用程序时,我已经包含了必需的jar。
spark-submit \
--master yarn \
--driver-class-path /home/hadoop/mysql-connector-java-5.0.8-bin.jar,RedshiftJDBC42-1.2.10.1009.jar,spark-redshift_2.11-3.0.0-preview1.jar,aws-java-sdk-core-1.9.8.jar,aws-java-sdk-s3-1.9.8.jar,hadoop-aws-2.7.0.jar,hadoop-common-2.7.3.jar \
--jars /home/hadoop/mysql-connector-java-5.0.8-bin.jar,RedshiftJDBC42-1.2.10.1009.jar,spark-redshift_2.11-3.0.0-preview1.jar,aws-java-sdk-core-1.9.8.jar,aws-java-sdk-s3-1.9.8.jar,hadoop-aws-2.7.0.jar,hadoop-common-2.7.3.jar \
/home/hadoop/code.py
有人可以帮我解决这个问题吗?或者,是否有任何其他经过试验和测试的解决方案。 顺便说一句,它是AWS EMR中的单节点集群, PySpark Verion是2.2