【发布时间】:2014-03-10 12:01:28
【问题描述】:
我有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.
但是从映射器它会一次读取一行,所以我想在行之间添加分隔符('|'),所以上面的 CSV 文件记录将变成一行并输入映射器
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 中,我将按分隔符分割并计算后续记录[第一和第二坐标]之间的距离。
所以如果我有 30 个 CSV 文件,我想要 30 个映射器和 30 个减速器来处理这个 CSV 文件。 我还需要将此数据存储在 MySql 中。如纬度、经度、距离
【问题讨论】:
-
如果mapper和reducer之间存在1对1的映射,我看不出有reducer的原因。你最好只做一个 map 工作,因为在 mapper 和 reducer 之间没有数据混洗,所以效率更高。
-
csv 文件中的数据是相互关联的[上一条记录与下一条记录有关],所以我想像 OneFile->Map1->Readucer1.... 那样制作 mapreduce。我在做什么正确吗
-
我认为@PraveenSripati 是对的。您能描述一下您要解决的问题吗?也许它可以用另一种方式解决,而不是你想象的那样。
-
感谢您的回复,我也在主线程中描述了我的问题陈述。