Amazon EMR 和 S3,org.apache.spark.sql.AnalysisException:路径 s3://..../var/table 已经存在

Amazon EMR and S3, org.apache.spark.sql.AnalysisException: path s3://..../var/table already exists

我试图找到 Spark 2.0.0 上错误的来源,我有一个地图,其中 table 名称作为键,数据框作为值,我循环遍历它并在结束使用 spark-avro (3.0.0-preview2) 将所有内容写入 S3 目录。它 运行 在本地是完美的(当然是使用本地路径而不是 s3 路径),但是当我 运行 它在亚马逊的 EMR 上它 运行 一段时间然后它说文件夹已经存在并终止(这意味着同一键值在该 for 循环中使用了不止一次,对吧?)。这可能是线程问题吗?

for ((k, v) <- tableMap) {
  val currTable: DataFrame = tableMap(k)
  val decryptedCurrTable = currTable.withColumn("data", decryptUDF(currTable("data")))
  val decryptedCurrTableData = sparkSession.sqlContext.read.json(decryptedCurrTable.select("data").rdd.map(row => row.toString()))
  decryptedCurrTable.write.avro(s"s3://..../$k/table")
  decryptedCurrTableData.write.avro(s"s3://..../$k/tableData")

我认为这是并发问题,我将代码更改为:

decryptedCurrTable.write.mode("append").avro(s"s3://..../$k/table")
decryptedCurrTableData.write.mode("append").avro(s"s3://..../$k/tableData")  

一切正常。