python mongodb MapReduce
# -*- coding: utf-8 -*-
import os
import csv
import pymongo
from pymongo import MongoClient
from bson.code import Code
from pymongo import MongoClient
#建立连接
client = MongoClient('10.20.4.79', 27017)
#client = MongoClient('10.20.66.106', 27017)
db_name = 'ta' #数据库名
db = client[db_name]
插入测试数据:
for i in xrange(1000):
rID=math.floor(random.random()*10);
price = round(random.random()*10,2);
if rID < 4:
db.test.insert({"_id":i,"user":"Joe","product":rID,"price":price});
elif rID>=4 and rID<7:
db.test.insert({"_id":i,"user":"Josh","product":rID,"price":price});
else:
db.test.insert({"_id":i,"user":"Ken","product":rID,"price":price});
结果数据为:
{ "_id" : 0, "price" : 5.9, "product" : 9, "user" : "Ken" }
{ "_id" : 1, "price" : 7.59, "product" : 7, "user" : "Ken" }
{ "_id" : 2, "price" : 4.72, "product" : 0, "user" : "Joe" }
{ "_id" : 3, "price" : 1.35, "product" : 1, "user" : "Joe" }
{ "_id" : 4, "price" : 2.31, "product" : 0, "user" : "Joe" }
{ "_id" : 5, "price" : 5.29, "product" : 5, "user" : "Josh" }
{ "_id" : 6, "price" : 3.34, "product" : 1, "user" : "Joe" }
{ "_id" : 7, "price" : 7.2, "product" : 4, "user" : "Josh" }
{ "_id" : 8, "price" : 8.1, "product" : 6, "user" : "Josh" }
{ "_id" : 9, "price" : 2.57, "product" : 3, "user" : "Joe" }
{ "_id" : 10, "price" : 0.54, "product" : 2, "user" : "Joe" }
{ "_id" : 11, "price" : 0.66, "product" : 1, "user" : "Joe" }
{ "_id" : 12, "price" : 5.51, "product" : 1, "user" : "Joe" }
{ "_id" : 13, "price" : 3.74, "product" : 6, "user" : "Josh" }
{ "_id" : 14, "price" : 4.82, "product" : 0, "user" : "Joe" }
{ "_id" : 15, "price" : 9.79, "product" : 3, "user" : "Joe" }
{ "_id" : 16, "price" : 9.6, "product" : 5, "user" : "Josh" }
{ "_id" : 17, "price" : 4.06, "product" : 7, "user" : "Ken" }
{ "_id" : 18, "price" : 1.37, "product" : 5, "user" : "Josh" }
{ "_id" : 19, "price" : 6.77, "product" : 9, "user" : "Ken" }
测试1、每个用户各购买了多少个产品?
用SQL语句实现为:select user,count(product) from test group by user mapper = Code("""function (){emit(this.user,{count:1})}""")
reduce = Code("function (key, values) {"
" var total = 0;"
" for (var i = 0; i < values.length; i++) {"
" total += values[i].count;"
" }"
" return {count:total};"
"}")
result=db.test.map_reduce(mapper,reduce,out ='myresults')
for doc in db.myresults.find():
print doc
测试 2、查询每个用户,买了多少商品,总价格,及评价价格 条件是价格大于5的 SQL实现:select user,count(sku),sum(price),
round(sum(price)/count(sku),2) as avgPrice from test where prince>5 group by user
mapper=Code("""function (){emit(this.user,{amount:this.price,count:1,avgPrice:0})}""")
reduce = Code("function (key, values) {"
" var res={amount:0,count:0,avgPrice:0};"
" for (var i = 0; i < values.length; i++) "
" {"
" res.count += values[i].count;"
" res.amount += values[i].amount;"
" }"
" res.avgPrice = (res.amount/res.count).toFixed(2);"
" return res;"
"}")
result = db.test.map_reduce(mapper,reduce,out ='myresults',query={'price':{'$gt': 6}})
for doc in db.myresults.find():
print doc
python mongodb MapReduce的更多相关文章
- MongoDB MapReduce(转)
MapReduce MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE).这样做的好处是可以在任务被分解后,可以通过大量机 ...
- Python Mongodb接口
Python Mongodb接口 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. 同时,MongoDB 是一个介于关系 ...
- 用python写MapReduce函数——以WordCount为例
尽管Hadoop框架是用java写的,但是Hadoop程序不限于java,可以用python.C++.ruby等.本例子中直接用python写一个MapReduce实例,而不是用Jython把pyth ...
- python+MongoDB使用示例
本博客起源于博主的大三NoSQL课程设计,采用python+MongoDB结合方式,将数据从txt文件导入MongoDB之中,再将其取出以作图.主要技术是采用python与MongoDB结合存储读取方 ...
- Python实现MapReduce,wordcount实例,MapReduce实现两表的Join
Python实现MapReduce 下面使用mapreduce模式实现了一个简单的统计日志中单词出现次数的程序: from functools import reduce from multiproc ...
- Python MongoDB 教程
基于菜鸟教程实际操作后总结而来 Python MongoDB MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). MongoDB 数据库安装与介绍可以 ...
- mongodb mapreduce使用总结
文章来自本人个人博客: mongodb mapreduce使用总结 大家都知道,mongodb是一个非关系型数据库.也就是说.mongodb数据库中的每张表是独立存在的,表与表之间没有不论什么依赖 ...
- 吴裕雄--天生自然python学习笔记:Python MongoDB
MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). PyMongo Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 P ...
- [python]Mongodb
文档: http://api.mongodb.com/python/current/tutorial.html 安装: 官网直接下载安装, mac上brew安装的下载太慢, 打算手动安装 使用: 开启 ...
随机推荐
- kali Linux 文本图形界面切换遇到的怪问题
前段装了在Virtual Box上装一个Kali Linux玩,然后设为了开机进入文本界面,后来遇到无法上网的问题,网上找到解决方法,说是NAT地址转换和host-only双网卡顺序问题,按照网上的说 ...
- [转]使用ADO.NET访问Oracle存储过程
本文转自:http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程( ...
- Ubuntu 安装php_intl 扩展
PHP Intl 类在I18n的网站中真的很方便,允许你依赖在终端用户区域,很容易的输出正确的日期格式. 在使用 yii2-app-ecom , 初始化之后,访问首页出现了: The default ...
- android之APP+JNI+Drv框架
以LED为例 APP: JNI之java JNI之c DRV 项目组成:1.应用部分 1.1 APK(android工程) 1.1.1 java(功能) 1.1.2 xml(界面) 1.1.3 JNI ...
- MySQL索引详解
导读:大家都知道,一个MySQL数据库能够储存大量的数据,如果要查找那一个数据,就得费好大劲从一大堆的数据中找到,即费时间又费力气,这时,索引的出现就大大减轻了数据库管理员的工作.本文介绍了数据库索引 ...
- 【译文】NginScript – 为什么我们要实现自己的JS引擎?
在上周的nginx.conf 2015用户大会上,我们发布了全新的JavaScript引擎nginscript的预览版.历史上,JavaScript语言已经应用在许多方面,首先是作为客户端脚本,然后又 ...
- Cordova+angularjs+ionic+vs2015开发(二)
欢迎加群学习:457351423 这里有4000多部学习视频,涵盖各种技术,有需要的欢迎进群学习! 一.创建空白Cordova应用 打开VS,选择[新建项目],选择其它语言JavaScript或者Ty ...
- 使用info.plist(或工程名-info.plist)向程序中添加软件Build ID或者版本号信息
在实际应用程序开发过程中,经常需要向程序中添加软件版本号或者类似的信息,以保证之后发现问题时知道bug所在的版本,我们可以通过在工程名-info.plist文件中设置相关的key/value对(键/值 ...
- c#实现FTP上传
/// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件 ...
- 05_XML的解析_02_dom4j 解析将信息封装到对象中
[person.xml]要解析的内容 <?xml version="1.0" encoding="UTF-8"?> <students> ...