在Hadoop中合并CSV文件

4

我对Hadoop框架还不熟悉,希望有人能够指导我。

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

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

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

2个回答

3

这两个文件的头部信息、排序等都是一样的。

由于文件相同,您可以将它们上传到同一个目录中。

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

HDFS 会将这些文件作为“单个文件的部分”来处理,如果你从 hdfs:///path/to/input读取。

注意,在以这种方式放入 HDFS 之前,您需要从两个文件中删除头文件。

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

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

接下来,使用您熟悉的Hadoop工具读取文件。


1
似乎hadoop fs -getmerge工具可以合并具有相同标题的文件,只保留第一个文件的标题。这样,您就不需要去掉标题。 - cozyss
1
我原本以为它只是将所有文件内容一起复制。它并不聪明到能够检测匹配的文件头。 - OneCricketeer

0

由于它们具有相同的结构,使用 PIG 将它们都加载到两个关系中,然后将这两个关系进行 UNION 操作。最后,您可以根据特定条件筛选匹配的记录。为简单起见,我假设文件每个都有两个字段。

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接