【发布时间】:2017-05-10 20:42:49
【问题描述】:
我是 mapreduce 的初学者。我到处看到它只说明 mapreduce 使用键值对。但我没有找到使用键值对背后的明确原因。
先谢谢了!!
【问题讨论】:
我是 mapreduce 的初学者。我到处看到它只说明 mapreduce 使用键值对。但我没有找到使用键值对背后的明确原因。
先谢谢了!!
【问题讨论】:
Hadoop主要用于做数据分析。在数据分析中,我们研究统计和/或逻辑技术来描述和说明、浓缩和概括以及评估数据。我们绝不会修改数据。
Hadoop 处理结构化、非结构化和半结构化数据。 Schema 不像 RDBMS 那样是静态的。如果我们有静态模式,我们可以直接处理列而不是键和值。
键和值不是数据的内在属性,而是由分析数据的人选择的。因此,要进行任何分析,我们必须指定我们正在寻找什么(Key)以及它的价值(value)。
【讨论】:
如果您在一个部门中有多个员工的 group by 子句,并且您想知道每个部门有多少员工,那么键值将很有用,那么部门 ID 将是键,员工数表示为值。
假设你想在文件中找到最大的数字并说文件是
file1.txt
1
2
3
file2.txt
4
5
6
现在映射器将读取文件 1.txt 并将在键值对中逐行读取为 1(键作为行号) 1(值) 2(键作为行号) 2(值) 3(key作为行号)3(value)
说只产生一个输出(比如包括组合器):
file1 as key 3 as value
其他映射器的输出将是
file2 as key 6 as value
然后reducer会将该输入作为键值作为
file1 3
file2 6
并将生成最终的键值对,如下所示:
MAX 6
【讨论】:
让我们举一个简单的字数统计示例。 在字数统计程序中,mapper 接收简单的偏移量作为键和整行作为值。 我们将行拆分为单词并写入 (word,1) 作为 mapper 的输出。现在 reducer 将接收单词作为输入键和可迭代的值对象,我们遍历并获取该单词的总数。在 reducer 接收输入之前,hadoop 会进行混洗和排序,因此您可以按排序顺序将输入输入到 reducer,并且因为 reducer 会将同一键的所有映射器的输出转换为组合格式。现在,如果我们不将所有内容生成为键和值格式,我们将无法组合来自所有映射器的所有记录以将其提供给单个 reducer。
【讨论】: