1.假设在hdfs://hadoop0:9000/jqe/wc/data目录中存在两个文本文件(文件中仅有字符串和空格),分别是word1.txt和word2.txt,现需计算出这两个文件的单词数。要求输出结果按单词的字母顺序进行排序,并输出到两个文件中(以字母“g”进行拆分)。另外还需要对输出数据进行格式化,要求单词与词频之间以“~~~~~~”隔开。 其中,word1.txt的内容如下: this is a good dog that is a good cat word2.txt的内容如下: this is a bad dog that is a bad cat 输出结果应分为两个文件(系统自动命名),分别是part-r-00000和part-r-00001。期中,part-r-00000的内容如下: a~~~~~~4 bad~~~~~~2 cat~~~~~~2 dog~~~~~~2 part-r-00001的内容如下: good~~~~~~2 is~~~~~~4 that~~~~~~2 this~~~~~~2 (1) 请简要描述设计思路及画出设计思路图。
时间: 2023-07-01 21:26:04 浏览: 149
设计思路:
1. 将两个文件加载到Hadoop的分布式文件系统HDFS中。
2. 编写MapReduce程序,使用TextInputFormat读取HDFS中的文件,将单词作为Key,将词频作为Value进行统计。
3. 在Map函数中,对于每个单词,将其转换成小写,去除标点符号,并将其作为Key输出,同时将Value设置为1。
4. 在Reduce函数中,对于每个单词,对其Value进行累加,得到该单词的总词频。
5. 在Reducer结束时,将所有的单词和词频按照字母顺序进行排序,并写入两个不同的文件中。
设计思路图:
```
+------------------+ +---------------------+ +---------------------+
| Input Files | | MapReduce Program | | Output Files |
| (word1.txt, | | | | (part-r-00000, |
| word2.txt) | | | | part-r-00001) |
+------------------+ +----------+----------+ +-----------+---------+
| |
| |
v v
+--------------+--------------+ +---------+----------+
| Map | | Reduce |
| (word -> 1) -> (word, 1) | | (word, [1, 1, ...]) |
+--------------+--------------+ +---------+----------+
| |
v v
+----+----+ +-----+-----+
| Sorter | | Writer |
+---------+ +-----------+
```
其中,Map函数的输出是将单词作为Key,将Value设置为1,这样就可以在Reduce函数中对单词进行词频的累加。在Reducer结束时,可以使用一个Sorter对所有单词按照字母顺序进行排序,然后使用两个Writer将结果写入两个不同的文件中。
阅读全文