使用Python在Hadoop中读取制表符分隔文件

时间:2015-01-21 15:01:35

标签: python hadoop

我有一个标签分隔文件,其中包含有关客户资料的信息。我需要访问不同的列来执行一些数据审计报告,例如值范围,分组等。我想使用Python编写我的MapReduce程序。我需要读取输入文件并计算列数据,例如count,max,min等。例如,在下面的例子中,我需要找到col2的最大值:

col1 col2 col3 col4
A A1 2 4 5 
B B1 3 5 8
C C1 4 5 8

另请注意,我是Hadoop的新手,并尝试学习如何在Python中编写程序。

1 个答案:

答案 0 :(得分:1)

我将简化您的数据以进入Hadoop处理的核心。假设您有以下列数据:

2 4 5
3 5 8
4 5 8
1 4 5
5 5 8
0 5 8

分散在 n data*.csv个文件中,并且您希望得到每列的总和。当然,在实际情况中,您将拥有更多的行和/或列。我们将使用Pydoop Script来解决问题(是的,我在开发团队中)。将以下代码保存到名为colsum.py的文件:

def mapper(_, v, writer):
    for i, x in enumerate(v.split()):
        writer.emit(i, x)

def reducer(k, values, writer):
    writer.emit(k, sum(map(int, values)))

将数据保存到HDFS并运行应用程序:

$ hadoop fs -mkdir input
$ hadoop fs -put data*.csv input
$ pydoop script colsum.py input output

您的输出应如下所示:

$ hadoop fs -cat output/part*
2   42
0   15
1   28

第一列存储原始列索引,而第二列存储总和。您可以使用它来轻松地重建最终的总和向量,或将其保留原样以供进一步处理。