web-dev-qa-db-fra.com

=spark [Dataframe] .write.Option ("mode", "écraser"). Savastable ("FOO") échoue avec "déjà existant" si foo existe

Je pense que je vois un bug dans spark Où mode "écrasé" n'est pas respecté, une exception est plutôt lancée pour tenter de faire sauveille dans une table qui existe déjà (en utilisant le mode "écraser" ).

Vous trouverez ci-dessous un petit écriture qui reproduit le problème. La dernière déclaration aboutit à une lecture de la pile:

 org.Apache.spark.sql.AnalysisException: Table `example` already exists.;

Tout conseil très apprécié.

spark.sql("drop table if exists example ").show()
case class Person(first: String, last: String, age: Integer)
val df = List(
    Person("joe", "x", 9),
    Person("fred", "z", 9)).toDF()
df.write.option("mode","overwrite").saveAsTable("example")

val recover1 = spark.read.table("example")
recover1.show()


val df3 = List(
    Person("mouse", "x", 9),
    Person("golf", "z", 9)).toDF()

 df3.write.
    option("mode","overwrite").saveAsTable("example")      

val recover4 = spark.read.table("example")
recover4.show()     
5
Chris Bedford

saveAsTable _ ne vérifie pas les options supplémentaires, utilisez mode directement

df3.write.mode(SaveMode.Overwrite).saveAsTable("example")

ou alors

df3.write.mode("overwrite").saveAsTable("example")
1
Gelerion