我有一个问题,我需要在整个文件中生成从1开始的序列号。
比如说我有一个大文件follows:-
美国广播公司,123
abb公司,111
ccc公司,122
……n此类线的编号
现在我的输出应该是follows:-
1,,123
2,abb公司,111
3号,ccc,122
……以此类推。
使用mapreduce执行此操作的问题是,文件的每个分割都由不同的map函数并行处理,因此无法维护序列。请不要告诉我用一个减速机来做这个。我不想使用单个reduce,因为我想使用典型的mapreduce作业并行地执行此操作。那么,有没有什么最好的方法可以使用map reduce来实现这一点呢?
1条答案
按热度按时间yiytaume1#
你可以这样做,但有点棘手。您需要使用“mapred\u job\u id”环境变量,该变量为您提供减速机的作业id。
例如,当您读入“mapred\u job\u id”变量时,可能会得到如下结果:“job\u 201302272236\u 0001”。您可以获取作业id的最后一部分,即“0001”。
使用它,您可以为reducer输出的每一行构造一个前缀。例如,如果知道每个减速机最多输出1000行,则可以将此减速机的输出设置为1000-1999。第二个减速机的作业id为“job\u 201302272236\u 0002”,因此需要2000-2999。
使用python(hadoop流)的上述算法的示例代码: