我是mapreduce的初学者。在我看到的每个地方,它都只声明mapreduce使用键值对。但我没有找到使用键值对背后的明确原因。谢谢,这是预付款!!
vc9ivgsu1#
键值很有用,比如说在一个部门中有多个雇员的GROUPBY子句,并且你想找到每个部门中有多少雇员,那么department id就是键值,employee count就是键值。假设您想在文件中找到最大数量,并假设文件为
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
其他Map器的输出将是
file2 as key 6 as value
然后reducer将该输入作为键值
file1 3 file2 6
并将生成最终的键值对,如下所示:
MAX 6
b1payxdu2#
hadoop主要用来做数据分析。在数据分析中,我们着眼于统计和/或逻辑技术来描述和说明、浓缩和重述以及评估数据。我们决不会修改数据。hadoop处理结构化、非结构化和半结构化数据。与rdbms不同,schema不是静态的。如果使用静态模式,我们可以直接处理列,而不是键和值。键和值不是数据的固有属性,而是由分析数据的人员选择的。所以,要做任何分析,我们必须指定我们要寻找的(关键)和它的价值(价值)。
jvidinwx3#
让我们举一个简单的单词计数示例。在字计数程序中,mapper接收简单的偏移量作为键,整行作为值。我们将行拆分为单词并写入(word,1)作为mapper的输出。现在reducer将接收单词作为输入键和iterable value对象,我们遍历它并获得该单词的总数。在reducer接收到输入之前,hadoop会进行洗牌和排序,因为这样您可以按排序的顺序获得reducer的输入,并且因为reducer可以将同一个键的所有Map器的输出转换为组合格式。现在,如果我们不将所有内容都生成为键和值格式,我们将无法将来自所有Map器的所有记录组合起来,以便将其提供给单个reducer。
3条答案
按热度按时间vc9ivgsu1#
键值很有用,比如说在一个部门中有多个雇员的GROUPBY子句,并且你想找到每个部门中有多少雇员,那么department id就是键值,employee count就是键值。
假设您想在文件中找到最大数量,并假设文件为
现在mapper将读取say file1.txt,并将在键值对中逐行读取为1(键作为行号)1(值)2(键作为行号)2(值)3(键作为行号)3(值)
假设只产生一个输出(假设包括组合器),如下所示:
其他Map器的输出将是
然后reducer将该输入作为键值
并将生成最终的键值对,如下所示:
b1payxdu2#
hadoop主要用来做数据分析。在数据分析中,我们着眼于统计和/或逻辑技术来描述和说明、浓缩和重述以及评估数据。我们决不会修改数据。
hadoop处理结构化、非结构化和半结构化数据。与rdbms不同,schema不是静态的。如果使用静态模式,我们可以直接处理列,而不是键和值。
键和值不是数据的固有属性,而是由分析数据的人员选择的。所以,要做任何分析,我们必须指定我们要寻找的(关键)和它的价值(价值)。
jvidinwx3#
让我们举一个简单的单词计数示例。在字计数程序中,mapper接收简单的偏移量作为键,整行作为值。我们将行拆分为单词并写入(word,1)作为mapper的输出。现在reducer将接收单词作为输入键和iterable value对象,我们遍历它并获得该单词的总数。在reducer接收到输入之前,hadoop会进行洗牌和排序,因为这样您可以按排序的顺序获得reducer的输入,并且因为reducer可以将同一个键的所有Map器的输出转换为组合格式。现在,如果我们不将所有内容都生成为键和值格式,我们将无法将来自所有Map器的所有记录组合起来,以便将其提供给单个reducer。