V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wwttc
V2EX  ›  问与答

Hadoop Python 中读入文件的问题

  •  
  •   wwttc · 2014-07-29 10:18:03 +08:00 · 2791 次点击
    这是一个创建于 3768 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设我有一个文件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)
    3 条回复    2014-07-29 22:35:06 +08:00
    lcj2class
        1
    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
        2
    wwttc  
    OP
       2014-07-29 22:19:05 +08:00
    @lcj2class
    因为是中文的句子和单词,所以不能用if w in keys
    lcj2class
        3
    lcj2class  
       2014-07-29 22:35:06 +08:00
    汉字一样呀,你只要分好词就行

    在py文件开头加上

    # -*- coding: utf8 -*-

    就ok了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3777 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:56 · PVG 08:56 · LAX 16:56 · JFK 19:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.