Es tut mir leid, dass ich zu spät in den Beitrag geschrieben habe, aber ich sehe keine akzeptierte Antwort.
df.write().saveAsTable
wird werfen AnalysisException
und ist nicht HIVE-Tabelle kompatibel.
DF so speichern, wie df.write().format("hive")
es der Trick sein sollte!
Wenn dies jedoch nicht funktioniert, ist dies meiner Meinung nach die beste Lösung (offen für Vorschläge).
Der beste Ansatz besteht darin, eine HIVE-Tabelle (einschließlich der PARTITIONED-Tabelle) explizit zu erstellen.
def createHiveTable: Unit ={
spark.sql("CREATE TABLE $hive_table_name($fields) " +
"PARTITIONED BY ($partition_column String) STORED AS $StorageType")
}
DF als temporäre Tabelle speichern,
df.createOrReplaceTempView("$tempTableName")
und in die PARTITIONED HIVE-Tabelle einfügen:
spark.sql("insert into table default.$hive_table_name PARTITION($partition_column) select * from $tempTableName")
spark.sql("select * from default.$hive_table_name").show(1000,false)
Natürlich ist die LETZTE SPALTE in DF die PARTITIONSSÄULE. Erstellen Sie also eine entsprechende HIVE- Tabelle!
Bitte kommentieren Sie, ob es funktioniert! oder nicht.
--AKTUALISIEREN--
df.write()
.partitionBy("$partition_column")
.format("hive")
.mode(SaveMode.append)
.saveAsTable($new_table_name_to_be_created_in_hive)