使用 Python 在 Hadoop 中读取制表符分隔的文件
Read tab-separated file in Hadoop using Python
我有一个以制表符分隔的文件,其中包含有关客户资料的信息。我需要访问不同的列来做一些数据审计报告,比如值的范围、分组依据等。我想使用 Python 来编写我的 MapReduce 程序。我需要读取输入文件并计算列统计信息,例如计数、最大值、最小值等。例如,在以下情况下,我需要找到 col2 的最大值:
col1 col2 col3 col4
A A1 2 4 5
B B1 3 5 8
C C1 4 5 8
另请注意,我是 Hadoop 的新手,正在尝试学习如何在 Python 中为其编写程序。
我将简化您的数据以进入 Hadoop 处理的核心。假设您有以下柱状数据:
2 4 5
3 5 8
4 5 8
1 4 5
5 5 8
0 5 8
分散在 n data*.csv
个文件中,您想要获得每一列的总和。当然,在实际情况下,您会有更多的行 and/or 列。我们将使用 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
第一列存储原始列索引,而第二列存储总和。您可以使用它来轻松地重建最终的总和向量,或将其保留原样以供进一步处理。
我有一个以制表符分隔的文件,其中包含有关客户资料的信息。我需要访问不同的列来做一些数据审计报告,比如值的范围、分组依据等。我想使用 Python 来编写我的 MapReduce 程序。我需要读取输入文件并计算列统计信息,例如计数、最大值、最小值等。例如,在以下情况下,我需要找到 col2 的最大值:
col1 col2 col3 col4
A A1 2 4 5
B B1 3 5 8
C C1 4 5 8
另请注意,我是 Hadoop 的新手,正在尝试学习如何在 Python 中为其编写程序。
我将简化您的数据以进入 Hadoop 处理的核心。假设您有以下柱状数据:
2 4 5
3 5 8
4 5 8
1 4 5
5 5 8
0 5 8
分散在 n data*.csv
个文件中,您想要获得每一列的总和。当然,在实际情况下,您会有更多的行 and/or 列。我们将使用 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
第一列存储原始列索引,而第二列存储总和。您可以使用它来轻松地重建最终的总和向量,或将其保留原样以供进一步处理。