我正在尝试使用scala 2.10
从redshift读取数据到spark 1.5我已经构建了spark-redshift包并将amazon JDBC连接器添加到项目中,但我一直收到此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials
我已通过以下方式进行身份验证:
val hadoopConf = sc.hadoopConfiguration
hadoopConf.set("fs.s3n.impl","org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3n.awsAccessKeyId", "ACCESSKEY")
hadoopConf.set("fs.s3n.awsSecretAccessKey","SECRETACCESSKEY")
val df: DataFrame = sqlContext.read.format("com.databricks.spark.redshift")
.option("url","jdbc:redshift://AWS_SERVER:5439/warehouseuser=USER&password=PWD")
.option("dbtable", "fact_time")
.option("tempdir", "s3n://bucket/path")
.load()
df.show()
答案 0 :(得分:1)
关于你的第一个错误java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials
我重复我在评论中所说的话:
您忘记在Spark应用程序jar中发布AWS依赖关系jar
关于第二个错误,我不确定该软件包,但它更有可能成为您需要的org.apache.httpcomponents库。 (我不知道你用它的想法!)
您可以将以下内容添加到maven依赖项中:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.3</version>
</dependency>
你需要组装整个。
PS:在未安装库时,您始终需要提供库。你还必须考虑到你提交的罐子的大小,因为它会损害性能。