Spark (PySpark) 文件已存在异常
Posted
技术标签:
【中文标题】Spark (PySpark) 文件已存在异常【英文标题】:Spark (PySpark) File Already Exists Exception 【发布时间】:2017-11-30 21:25:08 【问题描述】:我正在尝试将数据框另存为文本文件,但是,我收到了 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
【问题讨论】:
【参考方案1】:您可以使用overwrite
或append
替换文件或将数据添加到同一文件中。
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")
【讨论】:
我在这里上传了异常:gist.github.com/jerdeb/c30f65dc632fb997af289dac4d40c743【参考方案2】:我遇到了同样的问题,并且能够解决这个问题:
outputDir = "/FileStore/tables/my_result/"
dbutils.fs.rm(outputDir , True)
只需将 outputDir 变量更改为您要写入的任何目录。
【讨论】:
【参考方案3】:您应该检查您的执行程序并查看失败的执行程序的日志。
就我而言,我在一个大型 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
错误。
【讨论】:
以上是关于Spark (PySpark) 文件已存在异常的主要内容,如果未能解决你的问题,请参考以下文章
pyspark addPyFile 添加 .py 文件的 zip,但仍未找到模块
使用 pyspark 在数据块中实现 FileNotFound 异常
Spark Python提交错误:文件不存在:pyspark.zip
为啥在使用 pyspark 加入 Spark 数据帧时出现这些 Py4JJavaError showString 错误?