# -*- 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的更多相关文章

  1. MongoDB MapReduce(转)

    MapReduce MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE).这样做的好处是可以在任务被分解后,可以通过大量机 ...

  2. Python Mongodb接口

    Python Mongodb接口 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. 同时,MongoDB 是一个介于关系 ...

  3. 用python写MapReduce函数——以WordCount为例

    尽管Hadoop框架是用java写的,但是Hadoop程序不限于java,可以用python.C++.ruby等.本例子中直接用python写一个MapReduce实例,而不是用Jython把pyth ...

  4. python+MongoDB使用示例

    本博客起源于博主的大三NoSQL课程设计,采用python+MongoDB结合方式,将数据从txt文件导入MongoDB之中,再将其取出以作图.主要技术是采用python与MongoDB结合存储读取方 ...

  5. Python实现MapReduce,wordcount实例,MapReduce实现两表的Join

    Python实现MapReduce 下面使用mapreduce模式实现了一个简单的统计日志中单词出现次数的程序: from functools import reduce from multiproc ...

  6. Python MongoDB 教程

    基于菜鸟教程实际操作后总结而来 Python MongoDB MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). MongoDB 数据库安装与介绍可以 ...

  7. mongodb mapreduce使用总结

    文章来自本人个人博客: mongodb mapreduce使用总结 ​ 大家都知道,mongodb是一个非关系型数据库.也就是说.mongodb数据库中的每张表是独立存在的,表与表之间没有不论什么依赖 ...

  8. 吴裕雄--天生自然python学习笔记:Python MongoDB

    MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). PyMongo Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 P ...

  9. [python]Mongodb

    文档: http://api.mongodb.com/python/current/tutorial.html 安装: 官网直接下载安装, mac上brew安装的下载太慢, 打算手动安装 使用: 开启 ...

随机推荐

  1. LLDB调试基本使用

    在平时开发中,我们可能需要调试某些东西,比如查看给服务器发请求时传过去的参数,如果不适用LLDB的话我们用的最多的就是通过NSLog方式去打印,但现在我们可以精简这个步骤,那就是使用LLDB调试命令. ...

  2. c++中运算符重载,+,-,--,+=,-=,*,/,*=,/=,

    #include<iostream> #include<stdlib.h> using namespace std; class Complex { public: Compl ...

  3. win7 X64可用的单文件IE7 遨游美化版

    这个是在深度社区淘来的,哇,才700多Kb,而且里面还集成了很多的功能,在win7 X64下面正常运行.哈哈 分享给大家: http://pan.baidu.com/share/link?uk=171 ...

  4. nodejs 微信中使用file组件上传图片在某些机型上点击无反应

    看下下面的代码: <form action="/" class="file_upload" method="post" enctype ...

  5. mig_ddr4_ultrascale

    http://china.xilinx.com/support/documentation-navigation/design-hubs/dh0061-ultrascale-memory-interf ...

  6. xml复习

    一.XML概述 1.XML是可扩展标记语言.是由W3C指定并维护的,目前最新的版本是1.0 2.XML作用: 2.1传输数据,它是一种通用的数据交换格式 2.2配置文件. 二.xml语法 1.XML的 ...

  7. 【算法】A*改进算法

    目的:我这里希望实现一个java A* 游戏里的战斗寻径 定义部分: 这个定义引用自 http://www.cnblogs.com/kanego/archive/2011/08/30/2159070. ...

  8. Extjs combo赋值与刷新的先后顺序

    今天在跟一个弹出框中的多选下拉框赋值并实现反选的时候.惊讶的发现:原来我之前对于Combo的赋值的认知观是错误的. 我开始在窗体的beforeshow事件中对Combo控件赋值.开始使用了setVal ...

  9. hdoj1584 蜘蛛牌 (区间型动态规划)

    hdoj1584 分析: f[i][j] 表示 把一串牌 牌 i 到 j 摞为一摞时 所花费最少的步数. d[i][j] 表示把牌 i 挪到牌 j 上时需要走的步数(最初给的状态). 以一串牌 3~8 ...

  10. SharePoint 学习记事(一)

    记录背景: 随着公司业务的拓展,为拿到更多的项目,让原本不太信任我们的美国大佬相信我们的实力,让在美国的销售发挥他的能力,所以公司在13年下半年筹划收购了一家美国本土的公司.大约400人的规模,这个公 ...