Hadoop FileUtil copymerge - 忽略标头

时间:2017-12-26 14:29:58

标签: hadoop apache-spark

从spark到HDFS写入时,根据标题设置,每个文件都有一个标题。因此,当在FileUtil中调用copymerge时,我们会在合并文件中获得重复的标头。有没有办法从第一个文件中保留标题而忽略其他文件。

1 个答案:

答案 0 :(得分:1)

如果您计划将其合并为单个文件,然后将其提取到本地文件系统,则可以使用getmerge

  

getmerge

     

用法:download_prerequisites

     

将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件。可选地,-nl可以设置为允许在每个文件的末尾添加换行符(LF)。 -skip-empty-file可用于在空文件的情况下避免不需要的换行符。

现在要删除标题,您应该知道标题的样子。

假设您的标题如下:

hadoop fs -getmerge [-nl] <src> <localdst>

您可以使用:

HDR20171227

其中sed -i '1,${/^HDR/d}' "${final_filename}" 是本地FS上文件的名称。

这将删除文件中以final_filename开头的所有行,并在第一行之后删除。

如果您不确定标题,可以先使用

将其存储在变量中
HDR

然后使用header=$(head -1 "${final_filename}" ) 继续删除它。