ipyparallel 之中,可以利用多个engine同时运行一个任务来加快处理的速度。在ipyparallel之中,集群被抽象为view,包括direct_view和balanced_view。其中,direct_view是所有的engine的抽象,当然也可以自行指定由哪些engine构成,而balanced_view是多个engine经过负载均衡之后,抽象出来的由“单一”engine构成的view。利用ipyparallel并行化的基本思路是将要处理的数据首先进行切分,然后分布到每一个engine上,然后将最终的处理结果合并,得到最终的结果,其思路和mapreduce类似。
        下面是一个ipyparallel的并行化wordcount实现,主要思路是:首先读取文件中的句子。利用dview的scatter方法将所有的句子切分成n块发送到每一个engine上,正好每一个engine一个。然后在每一个engine上对切分之后的句子统计词频,最后归并所有engine处理之后的结果。
#!/usr/bin/env python
# coding: utf-8 import time from itertools import repeat
from ipyparallel import Client, Reference
from urllib import urlretrieve
#对text进行wordcount处理
def wordfreq(text):
"""Return a dictionary of words and word counts in a string."""
freqs = {}
for word in text.split():
lword = word.lower()
freqs[lword] = freqs.get(lword, 0) + 1
return freqs
#输出词频前n个的单词以及其出现的次数
def print_wordfreq(freqs, n=10):
"""Print the n most common words and counts in the freqs dict.""" words, counts = freqs.keys(), freqs.values()
items = zip(counts, words)
items.sort(reverse=True)
for (count, word) in items[:n]:
print(word, count) #自行实现的并行版本的word_freq,对若干行句子进行处理,返回词,出现次数 键值对
def myword_freq(texts):
freqs = {}
for str in texts:
for word in str.split():
lword = word.lower()
freqs[lword] = freqs.get(lword, 0) + 1
return freqs
#自行实现的并行版本的wordfreq,首先将texts[]分散传送至每一个engine,然后在每一个engine上执行程序myword_freq,返回求出的词 词频键值对
def myPwordfreq(view,lines):
#将文本平均分布在每一个engine上
view.scatter('texts',lines,flatten=True)
ar=view.apply(myword_freq,Reference('texts'))
freqs_list=ar.get()
#归并最终的处理结果 reduce it!
word_set=set()
for f in freqs_list:
word_set.update(f.keys())
freqs=dict(zip(word_set,repeat(0)))
for f in freqs_list:
for word,count in f.items():
freqs[word]+=count
return freqs if __name__ == '__main__':
# Create a Client and View
rc = Client() dview = rc[:]
# Run the serial version
print("Serial word frequency count:")
text = open('lines.txt').read()
tic = time.time()
freqs = wordfreq(text)
toc = time.time()
print_wordfreq(freqs, 10)
print("Took %.3f s to calculate"%(toc-tic))
# The parallel version
print("\nParallel word frequency count:")
lines=text.splitlines()
tic=time.time()
pfreqs=myPwordfreq(dview,lines)
toc=time.time()
print_wordfreq(pfreqs)
print("Took %.3f s to calculate"%(toc-tic))

ipyparallel WordCount实现的更多相关文章

  1. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  2. Hadoop3 在eclipse中访问hadoop并运行WordCount实例

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  3. Eclipse 执行成功的 Hadoop-1.2.1 WordCount 源码

    万事开头难.最近在学习Hadoop,先是搭建各种版本环境,从2.2.0到2.3.0,再到1.2.1,终于都搭起来了,折腾了1周时间,之后开始尝试使用Eclipse编写小demo.仅复制一个现成的Wor ...

  4. 软件工程:Wordcount程序作业

    由于时间的关系,急着交作业,加上这一次也不是那么很认真的去做,草草写了“Wordcount程序”几个功能,即是 .txt文件的读取,能计算出文件内容的单词数,文件内容的字符数,及行数. 这次选用C来做 ...

  5. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  6. MapReduce剖析笔记之一:从WordCount理解MapReduce的几个阶段

    WordCount是一个入门的MapReduce程序(从src\examples\org\apache\hadoop\examples粘贴过来的): package org.apache.hadoop ...

  7. 软件工程-构建之法 WordCount小程序 统计文件中字符串个数,单词个数,词频,行数

    一.前言 在之前写过一个词频统计的C语言课设,别人说你一个大三的怎么写C语言课程,我只想说我是先学习VB,VB是我编程语言的开始,然后接触到C语言及C++:再后来我是学习C++,然后反过来学习C语言, ...

  8. eclipse连hadoop2.x运行wordcount 转载

    转载地址:http://my.oschina.net/cjun/blog/475576 一.新建java工程,并且导入hadoop相关jar包 此处可以直接创建mapreduce项目就可以,不用下面折 ...

  9. Hadoop中wordcount程序

    一.测试过程中 输入命令: 首先需要在hadoop集群中添加文件 可以首先进行查看hadoop集群中文件目录 hadoop fs -ls / hadoop fs -ls -R / hadoop fs ...

随机推荐

  1. OSPF的基本配置及DR /BDR选举的实验

    OSPF的基本配置及DR /BDR选举的实验 实验拓扑: 实验目的:掌握OSPF的基本配置 掌握手工指定RID 掌握如何修改OSPF的接口优先级 观察DR BDR选举的过程 实验要求:R3当选为DR ...

  2. C#入门经典(2-重置窗体布局,界面介绍,错误列表)

  3. git 使用系列(一)—— git stash 的使用

    1. git 放弃本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash p ...

  4. List转换成DataSet实现代码

    public DataSet ConvertToDataSet<T>(IList<T> list) { if (list == null || list.Count <= ...

  5. Matplotlib中文显示的问题

    原文地址:http://blog.csdn.net/rumswell/article/details/6544377 #Matplotlib中文显示有问题,当然可以修改配置文件matplotlibrc ...

  6. error=11, Resource temporarily unavailable

    问题1:Cannot run program "/bin/ls": error=11, Resource temporarily unavailable 1 15/04/22 14 ...

  7. (转)java判断string变量是否是数字的六种方法小结

    java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolea ...

  8. iOS图片缓存框架SDWebImage

    本文转发至: http://blog.csdn.net/uxyheaven/article/details/7909373 http://www.cocoachina.com/ios/20141212 ...

  9. switch条件语句规则

  10. mac ox 配置java和maven

    参考http://www.cnblogs.com/iOS-mt/p/5726380.html 以及http://blog.csdn.net/done58/article/details/5113805 ...