mrjob 使用 mongoldb 数据源【转】

最近做的事情是用mrjob写mapreduce程序,从mongo读取数据。我的做法很容易也很好懂,因为mrjob可以支持sys.stdin的读取,所以我考虑用一个python程序读mongo中的数据,然后同时让mrjob脚本接受输入,处理,输出。

具体方式:

readInMongoDB.py:

#coding:UTF-8
‘‘‘
Created on 2014年5月28日

@author: hao
‘‘‘
import pymongo
pyconn = pymongo.Connection(host,port=27017)
pycursor = pyconn.userid_cid_score.find().batch_size(30)
for i in pycursor:
    userId = i[‘userId‘]
    cid = i[‘cid‘]
    score = i[‘score‘]
#     temp = list()
#     temp.append(userId)
#     temp.append(cid)
#     temp.append(score)
    print str(userId)+‘,‘+str(cid)+‘,‘+str(score)

step1.py:

#coding:UTF-8
‘‘‘
Created on 2014年5月27日

@author: hao
‘‘‘
from mrjob.job import MRJob
# from mrjob import protocol
import pymongo
import logging
import simplejson as sj

class step(MRJob):
    ‘‘‘
    ‘‘‘
#     logging.c
    def parseMatrix(self, _, line):
        ‘‘‘
        input one stdin for pymongo onetime search
        output contentId, (userId, rating)
        ‘‘‘
        line = (str(line))
        line=line.split(‘,‘)
        userId = line[0]
#         print userId
        cid = line[1]
#         print cid
        score = float(line[2])
#         print score
        yield cid, (userId, float(score))        

    def scoreCombine(self, cid, userRating):
        ‘‘‘
        将对同一个内容的(用户,评分)拼到一个list里
        ‘‘‘
        userRatings = list()
        for i in userRating:
            userRatings.append(i)
        yield cid, userRatings

    def userBehavior(self, cid, userRatings):
        ‘‘‘
        ‘‘‘
        scoreList = list()
        for doc in userRatings:
            # 每个combiner结果
            for i in doc:
                scoreList.append(i)
        for user1 in scoreList:
            for user2 in scoreList:
                if user1[0] == user2[0]:
                    continue
                yield (user1[0], user2[0]), (user1[1], user2[1])

    def steps(self):
        return [self.mr(mapper = self.parseMatrix,
                        reducer = self.scoreCombine),
                self.mr(reducer = self.userBehavior),]

if __name__==‘__main__‘:

    fp = open(‘a.txt‘,‘w‘)
    fp.write(‘[‘)
    step.run()
    fp.write(‘]‘)
    fp.close()

然后执行脚本  python readInMongoDB.py | python step1.py >> out.txt

这个方式在本地执行的非常好,没有任何问题(除开mrjob速度的问题,其实在本次应用中影响不大)

原文:http://blog.csdn.net/whzhcahzxh/article/details/29587059

时间: 2024-11-08 04:49:13

mrjob 使用 mongoldb 数据源【转】的相关文章

java SSM框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码

获取[下载地址]   QQ: 313596790官网 http://www.fhadmin.org/A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都

SpringMVC mybatis 多数据源 SSM java redis shiro ehcache

获取[下载地址]   QQ: 313596790A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩

第八章 springboot + mybatis + 多数据源(转载)

本篇博客转发自:http://www.cnblogs.com/java-zhao/p/5413845.html 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1)DatabaseType列出所有的数据源的key---key 2)DatabaseContextHolder是一个线程安全的DatabaseType容器,并提供了向其中设置和获取DatabaseType的方法 3)DynamicDataSource继承AbstractRoutin

WAS学习笔记之配置MySQL数据源

最近开始学习WAS,今天在websphere中配置MySQL的DataSource.我下载的是WAS for developers版本,建议大家可以下载这个版本.http://www.ibm.com/developerworks/downloads/ws/wasdevelopers/index.html 运行WAS控制台,在左边的导航菜单中点开资源->JDBC->JDBC提供程序. 这个开发人员版本提供的JDBC驱动很少,我们需要自己安装MySQL的JDBC驱动. 在新建JDBC驱动前将系统中

MR-Job提交流程

1.一个标准 MR-Job 的执行入口: //参数 true 表示检查并打印 Job 和 Task 的运行状况 System.exit(job.waitForCompletion(true) ? 0 : 1); 2.job.waitForCompletion(true)方法的内部实现 //job.waitForCompletion()方法的内部实现 public boolean waitForCompletion(boolean verbose ) throws IOException, Int

Spring 数据源配置三:多数据源

在上一节中,我们讲述了多数据的情况: 1. 数据源不同(数据库厂商不同, 业务范围不同, 业务数据不同) 2. SQL mapper 文件不同, 3. mybatis + 数据方言不同 即最为简单的多数据, 将多个数据源叠加在一起,不同service--->dao--->sessionFactory; 如果上述的所有条件都相同,仅仅是数据的的多个拷贝情况,想做主备(读写分离),那我们当然可以用2套复制的代码和配置,但是显然不是最佳的实现方式. 这里,我们就讲解一下多数据源的读写分离,怎么实现.

润乾集算报表使用远程HTTP数据源的示例

报表的数据来源多种多样,有时会接收来自HTTP服务器的数据进行报表展现,一般报表工具只能通过报表自定义数据源使用高级语言(如JAVA)进行处理,实现较为复杂.集算报表简单地通用集算器接收HTTP数据源完成报表展现.这里通过一个实例说明. 学生成绩信息存储在远程的JSON格式文件中,其所在HTTP服务器对外提供统一HTTP访问接口,现需要读取学生成绩信息开发报表,汇总学生成绩并按总成绩排名.报表样式如下: JSON文件中包含班级.编号.姓名.学科.成绩等信息,格式如下: [ { "class&qu

DataGridView控件绑定数据源

前言: 最近听说DataGridView控件能直接绑定数据源.而不用穿越这层那层的忍辱负重.获取数据.真是高兴的屁颠屁颠的.后来一想二狗肯定不会弄.特意写了一个笨蛋版的教程--也算记录生活.欢度端午了.粽子就不送给大家了.但是大家可以找我来要呦!数量有限送完为止!--chenchen --步骤 1 添加控件 2 添加数据源 中间过程就是点下一步就不截图了.最后选择的这个是每次连接获取数据库数据的表和表的字段 3 三个组件意思 Adapter控件:连接数据库获取数据 DataSet:存放获取好的数

C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结

我们在编程过程中,会涉及到表格数据的显示,存储等,就可能涉及到DataGridView,DataSource, DataTable等概念. 下面我就我自己模糊的一些知识点串讲以下: 1)首先我要讲的是一些控件: Control: 控件基类,有一个DataBindings对象,它是一个ControlBindingCollection类,这个类继承与BindingsCollection,里面有一个Binding的列表对象,其中Binding对象时一个记录了属性名,数据源,数据成员等的对象.还有个Bi