2016-07-29 4 views
4

Ich habe Probleme herauszufinden, wie Sie Daten in eine statische Partition einer Hive-Tabelle mit Spark SQL einfügen. Ich kann Code verwenden in dynamische Partitionen zu schreiben:Einfügen von Daten in eine statische Hive-Partition mit Spark SQL

df.write.partitionBy("key").insertInto("my_table") 

aber ich kann nicht herausfinden, wie die Daten in eine statische Partition einzufügen. Das heißt, ich möchte die Partition definieren, in die der gesamte DataFrame geschrieben werden soll, ohne dass die Spalte zum DataFrame hinzugefügt werden muss.

Ich sehe statische Partitionierung in der Klasse erwähnt, so denke ich, es wird unterstützt. Gibt es eine öffentliche API, um zu tun, was ich will?

+0

waren Sie ähnliche jede API finden können, in dynamische Partition schreiben? – Explorer

+1

Nein, ich konnte nichts finden und registrierte die RRD als temporäre Tabelle und führte SQL INSERT aus. Allerdings wurde ein großer Teil des Hive-Codes in Spark 2.0 neu geschrieben, so dass es jetzt möglich ist. –

Antwort

1

können Sie

DataFrame tableMeta = sqlContext.sql(String.format("DESCRIBE FORMATTED %s", tableName)); 
String location = tableMeta.filter("result LIKE 'Location:%'").first().getString(0); 

verwenden und regex Ihre Tabellenpartition erhalten verwenden. Sobald Sie die Tabellenposition zu erhalten, können Sie bequem die Partitionsposition konstruieren wie

String partitionLocation = location + "/" + partitionKey 

(PartitionKey ist so etwas wie dt = 20160329/h = 21)

Dann können Sie zu diesem Pfad schreiben

df.write.parquet(partitionLocation) 

(in meinem Fall, wenn ich den Datenrahmen zu bauen, ich habe nicht die Partitions Spalten enthält. nicht sicher, ob es ein Fehler ist, wenn Partition Spalten enthalten sind)

+1

Ich denke, den DataFrame als temporäre Tabelle registrieren und dann Hive SQL ausführen, die Daten von dort zu einer bestimmten Partition fügt, ist eine bessere Lösung als diese (es ist weniger fragile), aber ich frage mich speziell über native Unterstützung für diese in Spark. –

+0

Stimmen Sie dem Ausführen von HiveSQL zum Einfügen von Daten zu. Ich bin auf der Suche nach der nativen Unterstützung dafür, aber ich konnte es nirgendwo finden. – tpham

Verwandte Themen