2017-02-14 2 views
2

Was ist der richtige Weg, DF in Hive interne Tabelle im Append-Modus einzufügen. Es scheint, dass wir den DF direkt mit der Methode "saveAsTable" in Hive schreiben können oder den DF in die temporäre Tabelle speichern und dann die Abfrage verwenden.Wie Einfügen von Spark DataFrame in Hive Interne Tabelle?

df.write().mode("append").saveAsTable("tableName") 

ODER

df.registerTempTable("temptable") 
sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable") 

Wird der zweite Ansatz fügen Sie die Aufzeichnungen oder überschreiben?

Gibt es eine andere Möglichkeit, die interne Tabelle DF in Hive effektiv zu schreiben?

+0

Es hängt davon ab, wie (Typ) Ihre Tabellen und wo gespeichert werden. – FaigB

Antwort

2

df.saveAsTable("tableName", "append") ist veraltet. Stattdessen solltest du den zweiten Ansatz wählen.

sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable") 

Es wird Tabelle erstellen, wenn die Tabelle nicht existiert. Wenn Sie den Code zum zweiten Mal ausführen, müssen Sie die vorhandene Tabelle löschen, andernfalls wird der Code mit Ausnahme beendet.

Ein anderer Ansatz, wenn Sie nicht Tisch fallen lassen möchten. Erstellen Sie eine Tabelle separat und fügen Sie dann Ihre Daten in diese Tabelle ein.

Der Code unten werden die Daten in bestehende Tabelle

sqlContext.sql("insert into table mytable select * from temptable") 

anhängen und die folgenden Code werden die Daten in bestehende Tabelle

sqlContext.sql("insert overwrite table mytable select * from temptable") 

Diese Antwort basiert auf Spark 1.6.2 überschreiben. Falls Sie eine andere Version von Spark verwenden, würde ich vorschlagen, die entsprechende Dokumentation zu überprüfen.

+0

Danke, es funktioniert gut. – Shankar

5

Keine der Optionen hier funktioniert für mich/wahrscheinlich abgeschrieben, seit die Antwort geschrieben wurde.

Nach dem jüngsten spark API docs (für Spark 2.1), wird es mit der insertInto() Methode aus der DataFrameWriter Klasse

Ich bin mit den Python PySpark API aber es wäre das gleiche in Scala sein:

df.write.insertInto(target_db.target_table,overwrite = False) 

Das oben genannte funktionierte für mich.

Verwandte Themen