Hadoop Python 中读入文件的问题

2014-07-29 10:18:03 +08:00
 wwttc
假设我有一个文件A包含一些词(大概有1000多个词),另外5个文件S包含的都是句子(大概有3-4亿个句子)。
现在我想统计出A文件中每个单词,在S文件中句子所包含数量,就是S文件中有几个句子包含指定单词。
那么我在编写mapper.py中应该怎样输入这两类文件呢?
下面这么写可以吗?

#! /usr/bin/env python
#encoding=utf-8

import 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)
2793 次点击
所在节点    问与答
3 条回复
lcj2class
2014-07-29 11:52:36 +08:00
很明显,对于文件A你需要通过-file选项制定,然后另外5个文件放到一个文件夹下,假设在input下

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input input \
-output out \
-mapper myPythonScript.py \
-reducer /bin/wc \
-file 文件A

myPythonScript可以这么实现:

keys = [w.rstrip() for w in open("文件A").readlines()]

for line in sys.stdin:
words = line.split()
for w in words:
if w in keys
print("\t".join([w,1]))
wwttc
2014-07-29 22:19:05 +08:00
@lcj2class
因为是中文的句子和单词,所以不能用if w in keys
lcj2class
2014-07-29 22:35:06 +08:00
汉字一样呀,你只要分好词就行

在py文件开头加上

# -*- coding: utf8 -*-

就ok了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125005

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX