Ich versuche, JDBC in Spark zu verwenden, um aus einer MS SQL-Tabelle (in Azure) zu lesen und es als eine Parkett-Datei (entweder lokal oder S3) zu speichern. Ich habe das lokal arbeiten, aber ich kann es nicht funktionieren, wenn Spark auf EC2 ist.Hinzufügen von JDBC-Treiber zu PySpark beim Start ohne Konfigurationsdatei
Meine lokale Version funktioniert, weil ich manuell mein Funken defaults.conf Datei geöffnet und dieses Add **:
spark.driver.extraClassPath /Users/<my_user>/spark-1.6.1-bin-hadoop2.4/lib/postgresql-9.4.1208.jre6.jar:/Users/<my_user>/spark-1.6.1-bin-hadoop2.4/lib/sqljdbc4.jar
** I nur für diesen speziellen Anwendungsfall mssql brauchen
Mit EC2 I versucht, die folgenden Aktionen ausführen: ich mache das
wget https://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_6.0.7130.100_enu.tar.gz
tar -xf sqljdbc_6.0.7130.100_enu.tar.gz
ls
./spark/bin/pyspark --packages com.databricks:spark-csv_2.11:1.2.0 --driver-class-path "/root/sqljdbc_6.0/enu/sqljdbc4.jar"
Dann aus Python:
sqlserver_user = <my_sql_user>
sqlserver_pw = <my_sql_pw>
sqlserver_<my_database>_url = "jdbc:sqlserver://<my_server>.cloudapp.net:<port_num>;DatabaseName=<my_db>;user=<my_user>;password=<my_password>;"
my_jdbc_test = sqlContext.load(
source="jdbc",
url=sqlserver_<my_database>_url,
dbtable=<my_table>
)
my_jdbc_test.printSchema()
Die my_jdbc_test.printSchema()
korrekt angezeigt, das Schema:
>>> my_jdbc_test.printSchema()
root
|-- my_var1: string (nullable = true)
|-- my_var2: string (nullable = true)
|-- my_var3: string (nullable = false)
>>>
Doch wenn ich versuche, es zu meiner lokalen Festplatte als Parkett-Datei ich einen Treiber Fehler erhalten zu speichern:
my_jdbc_test.write.save("my_jdbc_test", format="parquet")
No suitable driver found for jdbc:sqlserver://<my_server>.cloudapp.net:<port_num>;DatabaseName=<my_db>;user=<my_user>;password=<my_password>;
Da es richtig angezeigt das Schema ich nehme an, es ist das jar wurde dem Master hinzugefügt, aber vielleicht ist die Quelle des Fehlers, es wird nicht zu den Arbeiter Knoten hinausgeschoben? Ich suchte eine Tonne und konnte nichts finden.
Vielen Dank im Voraus.
Können Sie versuchen: my_jdbc_test.write.save ("my_jdbc_test.parquet", format = "Parkett")? –