Spark DataFrame InsertIntoJDBC - TableAlreadyExists Ausnahme

8

Mit Spark 1.4.0 versuche ich, Daten aus einem Spark DataFrame mit insertIntoJdbc () in eine MemSQL-Datenbank einzufügen (was genau wie die Interaktion mit einer MySQL-Datenbank sein sollte). Jedoch bekomme ich immer eine Runtime TableAlreadyExists Ausnahme.

Zuerst erstelle ich die MemSQL-Tabelle wie folgt:

%Vor%

Dann erstelle ich einen einfachen Datenframe in Spark und versuche, so in MemSQL einzufügen:

%Vor%     
DJElbow 02.10.2015, 20:52
quelle

3 Antworten

6

Diese Lösung gilt für allgemeine JDBC-Verbindungen, obwohl die Antwort von @wayne wahrscheinlich eine bessere Lösung für memSQL ist.

insertIntoJdbc scheint seit 1.4.0 veraltet zu sein und verwendet sie tatsächlich write.jdbc ().

write () gibt ein DataFrameWriter-Objekt zurück. Wenn Sie Daten an Ihre Tabelle anhängen möchten, müssen Sie den Speichermodus des Objekts in "append" ändern.

Ein weiteres Problem mit dem Beispiel in der obigen Frage ist, dass das Schema DataFrame nicht mit dem Schema der Zieltabelle übereinstimmt.

Der folgende Code gibt ein funktionierendes Beispiel aus der Spark-Shell. Ich verwende spark-shell --driver-class-path mysql-connector-java-5.1.36-bin.jar , um meine Spark-Shell-Sitzung zu starten.

%Vor%     
DJElbow 02.10.2015, 22:02
quelle
3

Die InsertIntoDBC-Dokumente sind tatsächlich falsch. Sie sagen, dass die Tabelle bereits existieren muss, aber in der Tat wird sie einen Fehler auslösen, wie Sie oben sehen können:

Ссылка

Wir empfehlen die Verwendung unseres MemSQL Spark Connectors, den Sie hier finden:

Ссылка

Wenn Sie diese Bibliothek einschließen und com.memsql.spark.connector._ in Ihren Code importieren, können Sie df.saveToMemSQL (...) verwenden, um Ihren DataFrame in MemSQL zu speichern. Die Dokumentation zu unserem Connector finden Sie hier:

Ссылка

    
Wayne Song 02.10.2015 21:16
quelle
1

Ich hatte dasselbe Problem. Aktualisierung der Spark-Version auf 1.6.2 hat gut funktioniert

    
Dinesh Parmar 21.09.2016 10:14
quelle