Lamento escribir tarde a la publicación, pero no veo una respuesta aceptada.
df.write().saveAsTable
arrojará AnalysisException
y no es compatible con la mesa HIVE.
¡Almacenar DF como df.write().format("hive")
debería ser el truco!
Sin embargo, si eso no funciona, siguiendo los comentarios y respuestas anteriores, esta es la mejor solución en mi opinión (aunque abierta a sugerencias).
El mejor enfoque es crear explícitamente la tabla HIVE (incluida la tabla PARTICIONADA),
def createHiveTable: Unit ={
spark.sql("CREATE TABLE $hive_table_name($fields) " +
"PARTITIONED BY ($partition_column String) STORED AS $StorageType")
}
guardar DF como tabla temporal,
df.createOrReplaceTempView("$tempTableName")
e inserte en la tabla PARTITIONED HIVE:
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)
Por supuesto, la ÚLTIMA COLUMNA en DF será la COLUMNA DE PARTICIÓN así que cree la tabla HIVE en consecuencia!
¡Por favor comente si funciona! o no.
--ACTUALIZAR--
df.write()
.partitionBy("$partition_column")
.format("hive")
.mode(SaveMode.append)
.saveAsTable($new_table_name_to_be_created_in_hive)