val dataFrame = rdd.toDF()
dataFrame.coalesce(1).write.mode(SaveMode.Overwrite).parquet(filePath)
这很好用。但我想出了使用控制台和Hadoop的ls
命令,当它被合并时,文件和文件夹不在Hadoop文件系统上。
键入hadoop fs -ls hdfs://path
时,没有此类文件或目录。 coalesce
完成后,路径再次出现,同时也是合并的文件。
这可能是因为coalesce需要删除文件并创建一个新文件?!
现在的问题是:当文件不在文件系统上时,当我杀死进程/应用程序时,将删除整个文件。因此系统故障会破坏文件。
您是否知道如何防止文件丢失?我认为Spark / Hadoop会关心这一点。
谢谢,Alex