Spark 3.0出现以下问题如何解决?无法创建托管表。关联位置已存在。;

yyu*_*nkm 6 apache-spark spark-streaming spark3

在我的 Spark 工作中,我尝试覆盖结构化流的每个微批次中的一个表

batchDF.write.mode(SaveMode.Overwrite).saveAsTable("mytable")
Run Code Online (Sandbox Code Playgroud)

它产生了以下错误。

  Can not create the managed table('`mytable`'). The associated location('file:/home/ec2-user/environment/spark/spark-local/spark-warehouse/mytable') already exists.;

Run Code Online (Sandbox Code Playgroud)

我知道在 Spark 2.xx 中,解决这个问题的方法是添加以下选项。

spark.conf.set("spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation","true")
Run Code Online (Sandbox Code Playgroud)

它在 Spark 2.xx 中运行良好。不过,这个选项在 Spark 3.0.0 中被删除了。那么,在Spark 3.0.0中我们应该如何解决这个问题呢?

谢谢!

小智 0

看起来您在同一进程中运行测试数据生成和实际测试 - 您是否可以将它们替换为createOrReplaceTempView以将它们保存到 Spark 的内存目录中,而不是保存到 Hive 目录中?

类似于:batchDF.createOrReplaceTempView("mytable")