运行hadoop的word count例子,统计/myin学号后四位中所有文件的单词个数。并查看结果文件的内容:
时间: 2024-10-22 18:21:09 浏览: 18
Hadoop WordCount是一个经典的MapReduce示例,用于计算大量文本文件中每个单词出现的次数。假设我们有一个目录`/myin`,其中包含学号后四位命名的文本文件,比如`0001.txt`, `0002.txt`, ..., 我们可以编写一个简单的WordCount程序来完成这个任务。
首先,你需要在Hadoop集群上安装Hadoop并配置好环境。然后,你可以创建一个名为`wordcount.py`的Mapper脚本,它会读取输入文件,提取每一行,并分割成单词:
```python
#!/usr/bin/env python
import sys
for line in sys.stdin:
# 假设每行都是学号和内容,例如 "0001 This is a test"
# 使用正则表达式匹配学号并分割字符串
parts = line.strip().split(" ")
if len(parts) >= 2:
student_id = parts[0][-4:] # 取最后四位作为键
word = ' '.join(parts[1:]) # 提取内容为值
word = word.lower() # 转换为小写处理大小写敏感性
print("%s\t%s" % (student_id, word))
```
接下来,创建一个Reducer脚本`reducer.py`,它接收Mapper的输出,累加单词计数:
```python
#!/usr/bin/env python
import sys
current_word = None
current_count = 0
for line in sys.stdin:
key, value = line.strip().split("\t")
if current_word and current_word == key:
current_count += int(value)
else:
if current_word:
print(f"{current_word}\t{current_count}")
current_word = key
current_count = int(value)
# 输出最后一个单词及其计数
if current_word:
print(f"{current_word}\t{current_count}")
```
运行WordCount任务的命令类似这样:
```sh
hadoop jar hadoop-streaming.jar -mapper wordcount.py -reducer reducer.py -input /myin/ -output output_dir -file wordcount.py,reducer.py -D mapred.reduce.tasks=1
```
这将把结果保存在`output_dir`下,通常是`/user/hdfs/output_dir`。结果文件的内容是一对一对的,格式如`word:count`,例如:
```
test:1
is:1
this:1
...
阅读全文