在 Hadoop 中合并 CSV 文件 [关闭]
Posted
技术标签:
【中文标题】在 Hadoop 中合并 CSV 文件 [关闭]【英文标题】:merging CSV files in Hadoop [closed] 【发布时间】:2018-03-12 05:11:23 【问题描述】:我是 Hadoop 框架的新手,如果有人能指导我了解一下,我将不胜感激。
我正在尝试合并两个 .csv 文件。
两个文件有相同的标题,顺序相同,等等。
问题是我不知道如何将这些文件合并为一个,然后清理空行和未使用的列。
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于在 Hadoop 中合并 CSV 文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章