如何使用Spark将输出作为一个单独的文件写入现有HDFS目录下



我有一个用例,需要将输出作为一个单独的文件写入现有HDFS目录下。当我使用sparkContext.saveAsHadoopFile((方法时,会抛出一个异常,表示输出目录已经存在。目前,我可以使用Hadoop客户端库来完成这项工作,并将其作为Spark的任务来启动,下面是代码示例代码片段。我想知道我们是否可以使用Spark的库函数来完成这项工作?

使用标准Hadoop客户端库的代码。

val hdfs = FileSystem.get(getHDFSConfiguration(hadoopConf))
val outputFile = new Path(newPath)
hdfs.createNewFile(outputFile)
hdfs.append(outputFile)
.writeBytes(content)

Spark版本:2.3.x

如果您使用的Hadoop版本>0.20.0,您可以在hdfs-site.xml 中设置此属性

<property>
<name>dfs.support.append</name>
<value>true</value>
</property>

然后可以使用FileSystem的.append将数据添加到现有的数据路径中。

一种方法是创建一个数据帧并将其数据保存为文件

df.write.mode("append").csv("pathToFile")

请注意,如果不将联合设置为1,您将获得一些文件,而不是一个文件。要做到这一点,你需要

df.coalesce(1).write.mode("append").csv("pathToFile")

我假设您想将数据保存为csv,但还有其他多种格式,如镶木地板、avro、orc等,在某些方面比csv 更有效

最新更新