Zeppelin中的AWS Redshift驱动程序

时间:2016-04-20 13:37:24

标签: jdbc apache-spark amazon-redshift apache-zeppelin

我想使用笔记本Zeppelin在Redshift中探索我的数据。一个带有Spark的小型EMR集群正在运行。我正在加载databricks' spark-redshift库

%dep
z.reset()
z.load("com.databricks:spark-redshift_2.10:0.6.0")

然后

import org.apache.spark.sql.DataFrame

val query = "..."

val url = "..."
val port=5439
val table = "..."
val database = "..."
val user = "..."
val password = "..."

val df: DataFrame = sqlContext.read
  .format("com.databricks.spark.redshift")
  .option("url", s"jdbc:redshift://${url}:$port/$database?user=$user&password=$password")
  .option("query",query)
  .option("tempdir", "s3n://.../tmp/data")
  .load()

df.show

但我收到了错误

java.lang.ClassNotFoundException: Could not load an Amazon Redshift JDBC driver; see the README for instructions on downloading and configuring the official Amazon driver

我添加了选项

option("jdbcdriver", "com.amazon.redshift.jdbc41.Driver")

但不是更好。我想我需要在某处指定redshift的JDBC驱动程序,就像我将--driver-class-path传递给spark-shell一样,但是如何使用zeppelin呢?

1 个答案:

答案 0 :(得分:2)

您可以使用Zeppelin的dependency-loading mechanism添加具有依赖关系的外部jar,例如JDBC驱动程序,或者使用Spark,使用%dep dynamic dependency loader

  

当您的代码需要外部库,而不是下载/复制/重启Zeppelin时,您可以使用%dep解释器轻松执行以下作业。

     
      
  • 从Maven存储库
  • 递归加载库   
  • 从本地文件系统加载库
  •   
  • 添加其他maven存储库
  •   
  • 自动将库添加到SparkCluster(您可以关闭)
  •   

后者看起来像:

%dep
// loads with all transitive dependencies from Maven repo
z.load("groupId:artifactId:version")

// or add artifact from filesystem
z.load("/path/to.jar")

按惯例,必须在说明的第一段。