2016-04-20 10 views
1

Ich möchte meine Daten in Redshift mit Notebook Zeppelin erkunden. Ein kleiner EMR-Cluster mit Spark läuft dahinter. Ich lade databricks' Funken Rotverschiebung BibliothekAWS Redshift Treiber in Zeppelin

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

und dann

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 

aber ich habe den Fehler

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

I Option hinzugefügt

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

aber nicht für desto besser. Ich denke, ich muss den JDBC-Treiber von redshift irgendwo angeben, so wie ich es tun würde - Treiber-Klassen-Pfad zu Spark-Shell, aber wie macht man das mit Zeppelin?

+0

Angesichts der Fehlermeldung sieht es so aus, als ob Sie einige zusätzliche Konfiguration vornehmen müssen. Sind Sie tatsächlich den Anweisungen aus dieser "README" gefolgt? Dies ist keine generische Fehlermeldung, sondern eine vom Rotverschiebungs-JDBC-Treiber erzeugte; Sie haben es installiert, aber es fehlt nur eine Konfiguration (oder zusätzliche Bibliotheken?). –

Antwort

2

Sie externe Gläser mit Abhängigkeiten, wie die Verwendung von JDBC-Treiber hinzufügen können entweder Zeppelin dependency-loading mechanism oder, im Fall von Spark, mit %depdynamic dependency loader

Wenn Ihr Code externe Bibliothek erfordert, anstatt das zu tun download/copy/Neustart Zeppelin, mit% dep interpreter können Sie problemlos folgende Jobs erledigen.

  • laden Bibliotheken rekursiv aus Maven Repository
  • laden Bibliotheken aus lokalen Dateisystem
  • Hinzufügen zusätzlicher Maven-Repository
  • automatisch Bibliotheken SparkCluster hinzufügen (Sie deaktivieren können)

Die Letzteres würde ungefähr so ​​aussehen:

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

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

und per Konvention muss im ersten Absatz der Notiz sein.