从spark到HDFS写入时,根据标题设置,每个文件都有一个标题。因此,当在FileUtil中调用copymerge时,我们会在合并文件中获得重复的标头。有没有办法从第一个文件中保留标题而忽略其他文件。
答案 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}" )
继续删除它。