Spark(PySpark)文件已经存在例外

时间:2017-11-30 21:25:09

标签: apache-spark pyspark pyspark-sql

我正在尝试将数据框保存为文本文件,但是,我收到了File Already Exists异常。我尝试将模式添加到代码但无济于事。此外,该文件实际上并不存在。有人会知道如何解决这个问题吗?我正在使用PySpark

这是代码:

distFile = sc.textFile("/Users/jeremy/Downloads/sample2.nq")
mapper = distFile.map(lambda q: __q2v(q))
reducer = mapper.reduceByKey(lambda a, b: a + os.linesep + b)
data_frame = reducer.toDF(["context", "triples"])
data_frame.coalesce(1).write.partitionBy("context").text("/Users/jeremy/Desktop/so")

我可以补充说,一段时间后会引发异常,并且有些数据实际存储在临时文件中(显然已删除)。

谢谢!

编辑:可以在此处找到异常:https://gist.github.com/jerdeb/c30f65dc632fb997af289dac4d40c743

3 个答案:

答案 0 :(得分:0)

您可以使用overwriteappend替换文件或将数据添加到同一文件中。

data_frame.coalesce(1).write.mode('overwrite').partitionBy("context").text("/Users/jeremy/Desktop/so")

data_frame.coalesce(1).write.mode('append').partitionBy("context").text("/Users/jeremy/Desktop/so")

答案 1 :(得分:0)

我遇到了同样的问题,能够解决这个问题:

outputDir = "/FileStore/tables/my_result/"

dbutils.fs.rm(outputDir , True)

只需将outputDir变量更改为您要写入的目录。

答案 2 :(得分:0)

您应该检查执行器,并查看失败的执行器的日志。

就我而言,我在大型DF上有一个coalesce(1)。我的4个执行器失败-3个执行器的错误为org.apache.hadoop.fs.FileAlreadyExistsException: File already exists

但是,其中1个例外:org.apache.spark.memory.SparkOutOfMemoryError: Unable to acquire 262144 bytes of memory, got 148328

我能够通过增加执行程序的内存来解决此问题,以便合并不会导致out of memory错误。