Apache spark 如何使用Spark将输出作为一个单独的文件写入现有HDFS目录下?
我有一个用例,需要将输出作为一个单独的文件写入现有HDFS目录下。当我使用sparkContext.saveAsHadoopFile()方法时,会抛出一个异常,表示输出目录已存在。目前,我可以使用Hadoop客户端库来完成它,并将其作为Spark的任务启动,下面是代码示例代码段。我想知道我们是否可以使用Spark的库函数来完成这项工作 代码使用标准Hadoop客户端库Apache spark 如何使用Spark将输出作为一个单独的文件写入现有HDFS目录下?,apache-spark,hadoop,hdfs,Apache Spark,Hadoop,Hdfs,我有一个用例,需要将输出作为一个单独的文件写入现有HDFS目录下。当我使用sparkContext.saveAsHadoopFile()方法时,会抛出一个异常,表示输出目录已存在。目前,我可以使用Hadoop客户端库来完成它,并将其作为Spark的任务启动,下面是代码示例代码段。我想知道我们是否可以使用Spark的库函数来完成这项工作 代码使用标准Hadoop客户端库 val hdfs = FileSystem.get(getHDFSConfiguration(hadoopConf)) val
val hdfs = FileSystem.get(getHDFSConfiguration(hadoopConf))
val outputFile = new Path(newPath)
hdfs.createNewFile(outputFile)
hdfs.append(outputFile)
.writeBytes(content)
Spark版本:2.3.x一种方法是创建一个数据帧并将其数据保存到一个文件中
df.write.mode("append").csv("pathToFile")
请注意,如果不将coalesce设置为1,您将获得一些文件,而不是一个文件。要做到这一点,你需要
df.coalesce(1).write.mode("append").csv("pathToFile")
我假设您希望将数据保存为csv,但还有其他多种格式,如拼花、avro、orc等,在某些方面比csv更有效。如果您使用的Hadoop版本>0.20.0,则可以在hdfs-site.xml中设置此属性
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
dfs.support.append
真的
然后可以使用文件系统的.append将数据添加到现有的数据路径中