【问题标题】:merging CSV files in Hadoop [closed]在 Hadoop 中合并 CSV 文件 [关闭]
【发布时间】:2018-03-12 05:11:23
【问题描述】:

我是 Hadoop 框架的新手,如果有人能指导我了解一下,我将不胜感激。

我正在尝试合并两个 .csv 文件。

两个文件有相同的标题,顺序相同,等等。

问题是我不知道如何将这些文件合并为一个,然后清理空行和未使用的列。

【问题讨论】:

    标签: csv hadoop merge apache-pig


    【解决方案1】:

    这两个文件具有相同的标题,顺序相同,等等

    由于文件相同,可以上传到同一个目录。

    hdfs dfs -mkdir -p /path/to/input
    hdfs dfs -put file1.csv /path/to/input
    hdfs dfs -put file2.csv /path/to/input
    

    如果您从hdfs:///path/to/input 读取,HDFS 会将这些本地视为“单个文件的一部分”

    注意,在以这种方式将它们放入 HDFS 之前,您需要从这两个文件中剥离标题。

    另一种选择是在本地连接文件。 (同样,首先删除标题,或至少从除第一个文件之外的所有文件中删除)

    cat file1.csv file2.csv > file3.csv
    hdfs dfs -put file3.csv /path/to/input
    

    之后,使用您知道的任何 Hadoop 工具来读取文件。

    【讨论】:

    • 看来hadoop fs -getmerge 工具可以合并具有相同标题的文件,只保留第一个文件的标题。这样你就不需要剥离标题。
    • 我的印象是它只是将所有文件内容复制在一起。检测匹配的文件头不够聪明。
    【解决方案2】:

    由于它们具有相同的结构,因此使用 PIG 将它们加载到 2 个关系中,然后将 2 个关系联合起来。最后,您可以过滤符合某些条件的记录。为了简单起见,我假设文件每个都有 2 个字段。

    A = LOAD '/path/file1.csv' USING PigStorage(',') AS (a1:chararray;a2:chararray);
    B = LOAD '/path/file2.csv' USING PigStorage(',') AS (b1:chararray;b2:chararray);
    C = UNION A,B;
    D = FILTER C BY (C.$0 is NULL OR C.$1 is NULL) <-- If first or second column is null filter the record.
    DUMP D;
    

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 2016-11-21
      • 2014-01-29
      • 2016-12-30
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2012-09-17
      • 2013-02-17
      相关资源
      最近更新 更多