gpt4 book ai didi

hadoop - 使用Map Reduce生成序列号

转载 作者:行者123 更新时间:2023-12-02 21:53:23 26 4
gpt4 key购买 nike

我有一个问题,我需要在整个文件中生成从1开始的序列号。

例如,我有一个 BIG 大文件,如下所示:

abc,123abb,111ccc,122 ..... N这样的行号

现在我的输出应该如下:

1,abc,1232,abb,1113,ccc,122 ....等等。

使用mapreduce进行此操作的问题在于,文件的每个拆分都是由不同的map函数并行处理的,因此无法维护序列。请不要告诉我使用单个 reducer 来执行此操作。我不想使用单个reducer,因为我想使用典型的mapreduce作业并行执行此操作。那么,有什么最好的方法可以使用map-reduce完成吗?

最佳答案

您可以执行此操作,但是有点棘手。您需要使用“mapred_job_id”环境变量,该变量为您提供 reducer 的作业ID。

例如,当您读取“mapred_job_id”变量时,您可能会得到类似以下内容的信息:“job_201302272236_0001”。您可以获取该作业ID的最后一部分,即“0001”。

使用此功能,您可以为reducer输出的每一行构造一个前缀。例如,如果您知道每个 reducer 最多输出1000条线,则该 reducer 的输出可以为1000-1999。第二个 reducer 的作业ID为“job_201302272236_0002”,因此需要2000-2999。

使用Python(Hadoop流)的上述算法的示例代码:

import os, sys
jobID = os.environ['mapred_job_id']
reducerID = jobID.split("_")[-1]

count = 0
for line in sys.stdin:
print str((reducerID*NUM)+count) + "," + line
count += 1

关于hadoop - 使用Map Reduce生成序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com