Hadoop Mapreduce多重映射和减速器

Hadoop Mapreduce多重映射和减速器,hadoop,mapreduce,Hadoop,Mapreduce,我有csv文件,数据如下 lat,lng 18.1234,77.3443 18.345,77.335 18.356,77.345 所以基本上包含纬度和经度,每个CSV文件高达1mb,我需要从CSV的第一条记录和第二条记录计算纬度和经度的距离 i.e 18.1234, 77.3443 and 18.345, 77.335. 但从mapper它会一次读取一行,所以我想在行之间添加delimeter(“|”),所以上面的CSV文件记录将成为mapper的一行和输入 Key->Filename

我有csv文件,数据如下

lat,lng
18.1234,77.3443
18.345,77.335
18.356,77.345
所以基本上包含纬度和经度,每个CSV文件高达1mb,我需要从CSV的第一条记录和第二条记录计算纬度和经度的距离

i.e 18.1234, 77.3443 and 18.345, 77.335.
但从mapper它会一次读取一行,所以我想在行之间添加delimeter(“|”),所以上面的CSV文件记录将成为mapper的一行和输入

Key->Filename
values-> All csv records as one line (all records seprated by delimetr) as text.

filename  18.1234,77.3443|18.345,77.335|18.356,77.345....
在Reducer中,我将用delimeter分割并计算后续记录之间的距离[第一和第二坐标]

所以,如果我有30个CSV文件,我想用30个映射器和30个还原器来处理这个CSV文件。
我还需要将这些数据存储在MySql中。例如lat、lng、distance

如果每个csv文件小于默认块大小,只需获取当前映射器的id并将其作为键发出即可


我相信您可以使用
conf.get(“mapred.tip.id”)
从映射器的配置中获取此id。

谢谢。。只想知道csv文件是否大于块大小,那么这是可能的。一个简单的解决方案是增加默认块大小,将其设置为大于最大的csv文件。否则,您可以获取输入文件的文件名,并相应地设置映射输出键。如果映射器和减速器之间存在1对1映射,我看不出使用减速器的原因。你最好有一个只映射的作业,它更有效,因为映射器和还原器之间没有数据混乱。csv文件中的数据彼此相关[上一条记录与下一条记录相关],所以我想让mapreduce像OneFile->Map1->Readucer1。。。。我认为@PraveenSripati是正确的。你能描述一下你试图解决的问题吗?也许它可以用另一种方法来解决,而不是你想象的。谢谢你的回复,我也在主线程中描述了我的问题陈述。