问一个关于Hadoop Python中读写文件统计分析相关问题,,假设我有一个文件A包含一
问一个关于Hadoop Python中读写文件统计分析相关问题,,假设我有一个文件A包含一
假设我有一个文件A包含一些词(大概有1000多个词),另外5个文件S包含的都是句子(大概有3-4亿个句子)。
现在我想统计出A文件中每个单词,在S文件中句子所包含数量,就是S文件中有几个句子包含指定单词。
那么我在编写mapper.py中应该怎样输入这两类文件呢?
下面这么写可以吗?
#! /usr/bin/env python#encoding=utf-8import sys f = file("words.txt")for word in f.readlines(): # 每行包含一个单词 for line in sys.stdin: # 从HDFS中读入包含句子的文件,每一行包含一个句子 if word in line.strip(): print '%s\t%s' % (word,1)
将文件A作为输入,Mapper中读文件。
下面是在Hadoop2下的代码(测试通过)。
mapper.py:
#! /usr/bin/env pythonimport syswith open('A') as f: words = [w.strip() for w in f]for line in sys.stdin: for w in words: if w in line: print '%s\t%s' % (w, 1)
reducer.py:
#! /usr/bin/env pythonimport sysfrom itertools import groupbydef yield_stdin(): for line in sys.stdin: yield line.rstrip().split('\t', 1)for k, rows in groupby(yield_stdin(), lambda x: x[0]): count = sum(int(v) for _, v in rows) print '%s\t%d' % (k, count)
运行任务:
HADOOP_HOME=/usr/local/hadoop$HADOOP_HOME/bin/hadoop fs -put S S$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming*.jar \ -file mapper.py -mapper mapper.py \ -file reducer.py -reducer reducer.py \ -file A \ # 重要 -input S -output count_lines
关于Hadoop之前的版本,需要修改hadoop-streaming-x.x.x.jar的位置。
编橙之家文章,
相关内容
- 使用Python+Selenium获取淘宝商品详情页面数据 ajax加载怎
- 求素数的问题,请问python计算第10979977个素数应该怎么
- python多线程依次下载思路,python多线程思路,我有一文件
- python httpserver被系统杀死是什么原因,pythonhttpserver,想在
- Python代码, 仿照玩蛇网经典代码单例, 却出现了不是单例
- Python SDK 构造上传策略怎么应用,pythonsdk,我在使用 Py
- Python split函数处理str转list的问题,pythonsplit,str1 = "
- python归替RuntimeError是什么错误?,pythonruntimeerror,class S
- Python中使用fork是否适合?,Python使用fork,通常在java开发
- win系统安装scipy失败问题,提示没有BLAS的原因是什么?
评论关闭