zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    memwatch使用简化
    memwatch检测内存泄露
    mtrace检测内存泄露
    2.14 环境变量及参数
    设计模式[索引]
    二叉树遍历
    AppCan 双击返回按钮退出应用
    MySQL语句相关经验总结
    mysql连接失败或出现“Too many connections”错误
    让IE的Button自适应文字宽度兼容
  • 原文地址:https://www.cnblogs.com/shaosks/p/5685354.html
Copyright © 2011-2022 走看看