我是mapreduce的初学者。我看到的任何地方都只表明mapreduce使用键值对。但是我没有找到使用键值对的明确理由。
谢谢你提前!!
答案 0 :(得分:3)
Hadoop主要用于进行数据分析。在数据分析中,我们研究统计和/或逻辑技术来描述和说明,压缩和回顾以及评估数据。我们绝不会修改数据。
Hadoop处理结构化,非结构化和半结构化数据。与RDBMS不同,Schema不是静态的。如果,我们有静态模式,我们可以直接处理列而不是键和值。
键和值不是数据的固有属性,但它们是由分析数据的人选择的。因此,要进行任何分析,我们必须指定我们正在寻找的东西(关键)以及它的价值(价值)。
答案 1 :(得分:1)
关键值将是有用的,例如,如果您在一个部门中有多个员工的group by子句,并且您想要查找每个部门中有多少员工,那么部门ID将是关键,而员工数量则表示为值。
假设您想在文件中找到最大数字,并说文件是
file1.txt
1
2
3
file2.txt
4
5
6
现在mapper将读取say file1.txt,并将在键值对中逐行读取 1(键号为行号)1(值) 2(键为行号)2(值) 3(键为行号)3(值)
并说只产生一个输出(比如包括合并器):
file1 as key 3 as value
其他映射器的输出将是
file2 as key 6 as value
然后reducer将该输入作为键值
file1 3
file2 6
并将产生最终的键值对,如:
MAX 6
答案 2 :(得分:0)
让我们举一个简单的单词计数示例。 在字数统计程序中,映射器接收简单的偏移量作为键,整行作为值。 我们将行拆分为单词并将(word,1)作为mapper的输出.Now reducer将接收单词作为输入键和可迭代值对象,我们遍历并获得该单词的总计数。在reducer收到输入之前,hadoop会进行混洗和排序,因为你可以按排序顺序获得reducer的输入,并且因为reducer将同一个键的所有映射器的输出转换为组合格式。现在,如果我们不生成键和值格式的所有内容,我们将无法将所有映射器中的所有记录组合在一起,以便将其提供给单个reducer。