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

ozxc1zmp  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(471)

我有一个用例,需要将输出作为一个单独的文件写入现有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

pbgvytdp

pbgvytdp1#

如果使用的hadoop版本大于0.20.0,则可以在hdfs-site.xml中设置此属性

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

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

7uhlpewt

7uhlpewt2#

一种方法是创建一个dataframe并将其数据保存到一个文件中

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

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

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

我假设您希望将数据保存为csv,但是还有其他多种格式,如parquet、avro、orc等,它们在某些方面比csv更有效

相关问题