Python开发Spark应用之Wordcount词频统计

一个早上只做了一点微小的工作,很忏愧。但是发现Spark这玩意还是蛮有意思的。下面给大家介绍一下如何用python跑一遍Wordcount的词频统计的示例程序。

在operator模块中导入add类from pyspark import SparkContext, SparkConf from operator import add#应用程序名#初始化一个SparkContext,现在sc就是一个SparkContext的实例化对象,然后方可创建RDD。

appName = "WordCount"conf = SparkConf().setAppName(appName).setMaster("local")sc = SparkContext(conf=conf)# inputFiles表示输入文件路径

stopWordFile表示停词文件路径

outputFile表示输出文件路径inputFiles = "/home/hadoop/software/spark-2.0.0-bin-hadoop2.6/examples/src/main/resources/wordcount/*"stopWordFile = "/home/hadoop/software/spark-2.0.0-bin-hadoop2.6/examples/src/main/resources/wordcount/stopword.txt"outputFile = "/tmp/result"#处理非单词符号targetList = list('\t().,?[]!;|') + ['--']#用空格替换这些标点符号,同时将替换后的行拆分成单词.在flatMap中使用replaceAndSplit函数def replaceAndSplit(s): for c in targetList: s = s.replace(c, " ") return s.split()inputRDD = sc.textFile(inputFiles)stopRDD = sc.textFile(stopWordFile)stopList = stopRDD.map(lambda x: x.strip()).collect()inputRDDv1 = inputRDD.flatMap(replaceAndSplit)inputRDDv2 = inputRDDv1.filter(lambda x: x not in stopList)inputRDDv3 = inputRDDv2.map(lambda x: (x,1))inputRDDv4 = inputRDDv3.reduceByKey(add)inputRDDv5 = inputRDDv4.map(lambda x: (x[1], x[0]))inputRDDv6 = inputRDDv5.sortByKey(ascending=False)inputRDDv7 = inputRDDv6.map(lambda x: (x[1], x[0])).keys()top100 = inputRDDv7.take(100)result = sc.parallelize(top100)result.saveAsTextFile(outputFile)

背景知识

1.任何Spark程序的编写都是从SparkContext(或用Java编写时的JavaSparkContext)开始的,SparkContext的初始化需要一个SparkConf对象,Sparkconf包括了Spark集群配置的各种参数(比如主节点的URL)。初始化后,就可以用SparkContext对象所包含的各种方法来创建,操作分布式数据集和共享变量。2.涉及的函数 - Python split()方法:通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串。 - Python strip() 方法:用于移除字符串头尾指定的字符(默认为空格)。 - Python lambda()方法:用来创建匿名函数,lambda的主体是一个表达式,用来封转有限的逻辑进去。 - Python内建的filter()函数 : 用于过滤序列,filter()也接收一个函数和一个序列. - map( )方法:接收一个函数,应用到RDD中的每个元素,然后为每一条输入返回一个对象。根据提供的函数对指定序列做映射。 - flatMap( )方法:接收一个函数replaceAndSplit,应用到RDD中的每个元素,返回一个包含可迭代的类型(如list等)的RDD,可以理解为先Map(),后flat(). - > map函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象;而flatMap函数则是两个操作的集合——正是“先映射后扁平化”:> 操作1:同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个对象操作2:最后将所有对象合并为一个对象 - Spark sortByKey函数 : 作用于Key-Value形式的RDD,并对Key进行排序。它是在org.apache.spark.rdd.OrderedRDDFunctions中实现的. - take(): Spark的RDD的action操作take()用于提取数据 - parallelize() : 创建一个并行集合,例如sc.parallelize(0 until numMappers, numMappers) 创建并行集合的一个重要参数,是slices的数目(例子中是numMappers),它指定了将数据集切分为几份. - Spark主要提供了两种函数:parallelize和makeRDD:1)parallelize的声明:def parallelize[T: ClassTag]( seq: Seq[T], numSlices: Int = defaultParallelism): RDD[T] 2)makeRDD的声明:def makeRDD[T: ClassTag]( seq: Seq[T], numSlices: Int = defaultParallelism): RDD[T] def makeRDD[T: ClassTag](seq: Seq[(T, Seq[String])]): RDD[T] 3)区别:A)makeRDD函数比parallelize函数多提供了数据的位置信息。B)两者的返回值都是ParallelCollectionRDD,但parallelize函数可以自己指定分区的数量,而makeRDD函数固定为seq参数的size大小。

这里写图片描述
使用spark-submit执行python文件,我们选择使用local模式以下是词频统计结果:
这里写图片描述
这里写图片描述
这里写图片描述
参考资料----------1.Lambda 表达式有何用处?如何使用?https://www.zhihu.com/question/201252562.python中的map、filter、reduce函数用法http://blog.sina.com.cn/s/blog_45ac0d0a010191rb.html3.Python 特殊语法:filter、map、reduce、lambdahttp://www.cnblogs.com/fangshenghui/p/3445469.html4.Spark RDD操作(Python)总结http://blog.csdn.net/sinat_29581293/article/details/514872835.SparkContext 简单分析http://www.cnblogs.com/softlin/p/5792126.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容