除了"如何使用MapReduce计算长文本中的单词"任务之外,我想不出任何好的例子.我发现这不是给别人一个关于这个工具有多强大的印象的最好例子.
我不是在寻找代码片段,实际上只是"文本"示例.
我知道如何List从Y- > "转换"一个简单的Java Z,即:
List<String> x;
List<Integer> y = x.stream()
.map(s -> Integer.parseInt(s))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
现在我想用Map做基本相同的事情,即:
INPUT:
{
"key1" -> "41", // "41" and "42"
"key2" -> "42 // are Strings
}
OUTPUT:
{
"key1" -> 41, // 41 and 42
"key2" -> 42 // are Integers
}
Run Code Online (Sandbox Code Playgroud)
解决方案不应限于String- > Integer.就像List上面的例子一样,我想调用任何方法(或构造函数).
与我的CouchDB问题有关.
任何人都可以用麻栗可以理解的方式解释MapReduce吗?
在许多应用MapReduce的实际情况中,最终的算法最终会成为几个MapReduce步骤.
即Map1,Reduce1,Map2,Reduce2等.
因此,您可以获得下一个映射的输入所需的最后一个reduce的输出.
管道成功完成后,您(通常)不希望保留中间数据.另外,因为这个中间数据通常是一些数据结构(如'map'或'set'),所以你不想在编写和读取这些键值对时花费太多精力.
在Hadoop中推荐的方法是什么?
是否有(简单)示例显示如何以正确的方式处理此中间数据,包括之后的清理?
根据 Hadoop - The Definitive Guide
FileInputFormats定义的逻辑记录通常不适合HDFS块.例如,TextInputFormat的逻辑记录是行,它们将经常跨越HDFS边界.这与你的程序的功能没有关系 - 例如,线路不会丢失或损坏 - 但值得了解,因为它确实意味着数据本地地图(即,与他们在同一主机上运行的地图)输入数据)将执行一些远程读取.这导致的轻微开销通常不显着.
假设记录行分为两个块(b1和b2).处理第一个块(b1)的映射器将注意到最后一行没有EOL分隔符,并从下一个数据块中取出剩余的行(b2).
映射器如何处理第二个块(b2)如何确定第一个记录是不完整的并且应该从块(b2)中的第二个记录开始处理?
在Map Reduce编程中,reduce阶段具有随机,排序和减少作为其子部分.排序是一件昂贵的事情.
Map Reduce Programming中减速器中的混洗和排序阶段的目的是什么?
用于演示MapReduce功能的主要示例之一是Terasort基准测试.我无法理解MapReduce环境中使用的排序算法的基础知识.
对我来说,排序只涉及确定元素与所有其他元素的相对位置.因此排序涉及将"一切"与"一切"进行比较.你的平均排序算法(快速,泡沫......)只是以聪明的方式做到这一点.
在我看来,将数据集分成多个部分意味着您可以对单个部分进行排序,然后您仍然必须将这些部分集成到"完整"的完全排序数据集中.鉴于分布在数千个系统上的TB级数据集,我认为这是一项艰巨的任务.
那怎么回事呢?这个MapReduce排序算法如何工作?
谢谢你帮我理解.
所以,我一直在热切关注Hadoop,说实话我很着迷,事情并没有变得更酷.
我唯一的小问题是我是一个C#开发人员,而且是Java.
这并不是说我不了解Java,因为我正在寻找Hadoop.net或NHadoop或者包含Google MapReduce方法的.NET项目.有谁知道吗?
我听说过很多关于map/reduce的内容,特别是在谷歌大规模并行计算系统的背景下.究竟是什么?