您可以使用map-reduce执行此任务。
伪代码:map1(list): #runs on first file
for each (i,x,y) in list:
emit ((x,y),(1,i))
map2(list): #runs on 2nd file
for each (x,y,temp) in list:
emit ((x,y),(2,temp))
reduce((x,y),list): #runs on output of both mappers
for each (aux, val) in list:
if aux == 1:
i = val
else:
temp = val
if both i and temp initialized:
emit(i,temp)
Map Reduce是一个框架,如果将大数据问题建模为一系列Map Reduce任务,则可以轻松实现这些问题,上面的伪代码解释了Map Reduce步骤可能是什么。
这种方法可以很容易地处理大量的数据(包括peta规模),并让框架为您做不干净的工作。
其思想是首先将每个文件映射到某种哈希表中(这是由框架内部完成的),您有两个哈希表:键=(x,y)值=id
键=(x,y)值=温度
一旦你有了两个哈希表,就很容易找到哪个id在一次传递中连接到哪个温度,并且一旦建立了连接-输出它。
这段代码的复杂度是O(n)一般情况。
请注意,如果坐标不是整数(但使用浮点),则需要使用基于树的映射而不是哈希表,并且在比较键时要非常小心,这是因为浮点运算的本质。
处理整数时不应出现此问题。