将RDD保存为文本文件会导致FileAlreadyExists异常。程序每次加载时如何创建新文件,并使用FileUtils删除旧文件

时间:2018-08-28 04:19:57

标签: scala apache-spark fileutils

代码:

val badData:RDD[ListBuffer[String]] = rdd.filter(line => line(1).equals("XX") || line(5).equals("XX"))
badData.coalesce(1).saveAsTextFile(propForFile.getString("badDataFilePath"))

第一次程序运行正常。再次运行时,它将引发文件AlreadyExists的异常。 我想使用FileUtils Java功能来解决此问题,并将rdd另存为文本文件。

3 个答案:

答案 0 :(得分:1)

在将文件写入指定路径之前,请删除现有路径。

val fs = FileSystem.get(sc.hadoopConfiguration)
fs.delete(new Path(bad/data/file/path), true)

然后执行您通常的写入过程。希望这能解决问题。

答案 1 :(得分:1)

import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path

val fs = spark.SparkContext.hadoopCofigurations
if (fs.exists(new Path(path/to/the/files)))
    fs.delete(new Path(path/to/the/files), true)

将文件名作为String传递给方法,如果存在目录或文件,它将删除。在将其写入输出路径之前,请使用这段代码。

答案 2 :(得分:0)

为什么不使用DataFrames?将 SampleContext = new SampleContext(ConnectionString); 放入RDD[ListBuffer[String]-类似于-

RDD[Row]