我正在尝试编写一个简单的Map-Reduce程序来对键值对进行排序。我的数据是一个.txt文件,其数字值后跟一个空格,然后是其他字符。例如
1 fdsaf
17 fdaasdfe
0 jowf453g
我编写了以下Matlab脚本和map / reduce函数:
ds = tabularTextDatastore('test.txt');
outds = mapreduce(ds, @Map, @Reduce);
readall(outds)
reset(ds);
function Map(data, ~, KVStore)
keys = data.Var1;
values = data.Var2;
addmulti(KVStore, keys, values)
end
function Reduce(intermKey, intermValIter, outKVStore)
while hasnext(intermValIter)
val = getnext(intermValIter);
end
add(outKVStore, intermKey, val)
end
尽管我从未调用过任何排序函数(尽管在旧版本的Matlab上运行该函数不会返回排序的数据),但它令人惊讶地返回了排序的键值对。不幸的是,它会删除键为0的所有行。因此,我在寻找一种解决此问题的方法,或者对另一种方法的建议。我致力于Map-Reduce,因为其目标是在无法容纳内存的大数据上运行它,但是我愿意使用其他语言,例如Python。