在 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 文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

pyspark 将多个 csv 文件合并为一个

将来自不同文件夹的多个 csv 文件(相似名称)合并到一个 csv 中并逐行绑定它们 [关闭]

在python中合并CSV文件[重复]

从R中的csv文件中删除多余的行,然后合并csv文件

批量将CSV文件转换为十六进制文件[关闭]

使用Python Dictionary在Python中合并CSV文件