【问题标题】:how to merge multiple csv file with one having same header如何将多个csv文件与一个具有相同标题的文件合并
【发布时间】:2019-09-10 20:59:51
【问题描述】:

在我的 hdfs 文件夹中,我不断地获取输入文件。我想从过去 15 分钟合并多个具有相同标题的 csv 文件,并制作一个具有一个标题的 csv 文件。我尝试使用-getmerge,但没有成功。请问各位大神指点一下?

【问题讨论】:

    标签: csv unix hdfs


    【解决方案1】:

    我指的是下面的链接以获取在过去“5 分钟”内处理的文件列表。

    Get the list of files processed in last 5 minutes 由于您想跳过单个标题并将所有列出的文件与单个标题合并。 可以将这些文件获取到本地 unix,如下所示:

    #!/bin/bash
    
    filenames=`hdfs dfs -ls /user/vikct001/dev/hadoop/external/csvfiles/part* | tr -s " " | cut -d' ' -f6-8 | grep "^[0-9]" | awk 'BEGIN{ MIN=5;LAST=60*MIN; "date +%s" | getline NOW } { cmd="date -d'\''"$1" "$2"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-WHEN; if(DIFF < LAST){ print $3 }}' `
    
    for file in $filenames
    do
       #echo $file
       hdfs dfs -get ${file} /home/vikct001/user/vikrant/shellscript/testfiles
    done
    

    一旦您在本地拥有列出的文件。可以使用以下命令合并所有具有单个标题的文件。

    awk '(NR == 1) || (FNR > 1)' /home/vikct001/user/vikrant/shellscript/testfiles/part*.csv > bigfile.csv
    

    这里有一个链接,了解更多关于此的详细信息。 Merge csv with a single header

    上面链接中提到了更多命令,但我发现这是最合适的。

    【讨论】:

    • 上述解决方案有点复杂。我们还有其他建议吗?在最后 15 分钟内获取所有文件或超过一小时的文件?
    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多