Spark编程模型之莎士比亚文集词频统计
前段时间因为学校的云计算比赛我无意间接触到了Spark云计算框架,从此对其一发不可收拾,无论从其执行效率还有他的其他方面的架构都感觉到无比强大,作为一个云计算的解决方案他有着比hadoop更好的优越性。因为Spark我又接触到编程语言届的新贵Scala面向对象的函数式编程语言,更是被它的巧妙所折服。
那么问题来了,请问什么事Spark? Spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。Spark非常小巧玲珑,由加州伯克利大学AMP实验室的Matei为主的小团队所开发。使用的语言是Scala,项目的core部分的代码只有63个Scala文件,非常短小精悍。
那么接下来讨论Spark编程模型,Spark 应用程序有两部分组成:
– Driver
– Executor
首先由Driver向集群管理器(Cluster Manager)申请资源,Cluster Manager在给出资源之后,Spark 在worker节点启动Executor,然后用Driver将jar包文件传给Executor,并将任务分割成一个个Task分配给Executor运行,Executor运行结束,提交汇总结束任务运行。
Spark进行编程主要是对它的RDD( Resilient Distributed Datasets,弹性分布式数据集)进行操作也就是其中Executor对RDD的操作。
其中RDD的操作主要变现在三方面:1.由Base到RDD,也就是我们可以将HDFS中的文件或者本地的文件转换成RDD。
2.Transformation操作也就是RDD->RDD(RDD之间互相转化的过程)
3.Action操作也就是RDD->driver or Base(RDD返还给Driver或者转化成hfds(或者本地)的文件过程)
一下是我总结的一些函数
因为这是我第一次写关于Spark方面的博客,那么我们就拿Spark的一个比赛中非常简单的题目作介绍。
莎士比亚文集词频统计并行化算法
环境描述: 本题目需要运行在 Apache Spark 1.0.1 环境下,使用 Java 或者 Scala 进行编程开发。
题目描述: 在给定的莎士比亚文集上(多个文件) ,根据规定的停词表,统计 出现频度最高的 100 个单词。
数据集: shakespear 文集, 具体下载地址见大赛网站 http://cloud.seu.edu.cn。
停词表: stopword.txt, 具体下载地址见大赛网站 http://cloud.seu.edu.cn。
程序设计约束: 程序需要三个输入参数,第一个为数据集路径(即 shakespear 文件夹的路径,文件夹中的文件名为固定文件名),第二个为停词表路径,第三 个为输出文件路径。 输出文件的格式为:
每个单词独立一行。
首先说明一下题目的意思,这个题目就是统计一下数据集: shakespear 文集中除去停词表中出现的单词中出现频率最高的100个。
我的过程如下:
1.停词存储
因为涉及的停词不是很多,但是要注意去除停词表后面的空格,把他们读入内存处理空格后形成一个Scala停词数组.
2.flatMap()
首先我会把每一行出现的制表符,逗号,冒号,分号等一些特殊符号替换成空格,然后按照空格将字符串进行分割.
3.filter
把出现在停词数组中的单词和空字符除去
4.map
把上面经过过滤的单词设为key,值设为1
5.reduceByKey
将所有相同的key进行增量累加
6.获得前一百个key
从上面所得的map结果集中获得key列表,然后从列表中获取前100个keyall
7.将结果存储磁盘文件
具体的Scala代码如下:
package com.zdx.spark import org.apache.spark.{ SparkContext, SparkConf } import org.apache.spark.SparkContext._ /** * Created by zdx on 14-11-8. */ object ShaShiBiYa { def main(args: Array[String]) { if (args.length != 3) { System.err.println("Usage: ShaShiBiYa <file of poems> <file of stopWord> <file of output>") System.exit(1) } val conf = new SparkConf().setAppName("ShaShiBiYa") val sc = new SparkContext(conf) val rddpoems=sc.textFile(args(0)) val rddstop=sc.textFile(args(1)) val stop=rddstop.map(_.replaceAll(" +","")).collect val word2=rddpoems.flatMap(_.replaceAll("\\t|\\(|\\)|\\||\\.|\\,|\\:|\\[|\\]|\\?|\\--|\\;|\\!"," ").split(" +")).filter(stop.contains(_)==false).filter(_.equals("")==false) val result2=word2.map((_,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)) val keyall=result2.keys val key100=keyall.take(100) val rdd8=sc.parallelize(key100) rdd8.saveAsTextFile(args(2)) sc.stop() } }
在具体的Scala代码中我们可以看到,代码非常的简洁,可见Scala是多么的强大,哈哈。继续学习,天天向上!!!
相关推荐
3. **编写SparkWordCount**:使用Scala在IDEA中编写Spark程序,实现词频统计功能。 4. **执行与分析**:在spark-shell中运行程序,观察执行过程,理解Spark如何处理数据。 **五、数据集说明** 本实践使用的数据集是...
### Spark编程模型与解析 #### 一、Spark编程模型概览 Spark作为一种高效的大数据处理框架,其核心组件Spark Core提供了强大的分布式计算能力。在深入探讨Spark编程模型之前,我们首先来回顾一下Spark的核心概念:...
一、利用Java程序实现词频统计 二、利用Scala程序实现词频统计 三、利用Python程序实现词频统计 四、利用Akka和Scala实现词频统计 五、利用MapReduce实现词频统计 六、利用Hive实现词频...八、利用Spark实现词频统计
使用MapReduce框架实现(Spark我还不会 )区别于普通的单词计数,本次实现的是中文汉字计数(要使用分词器)区别于单纯的统计词数,本项目实现的是求汉字词频的TopN2. 实验过程MapReduce实现英文词频统计使用中文...
3.Spark编程模型(上)--概念及SparkShell实战.pdf 3.Spark编程模型(下)--IDEA搭建及实战.pdf 4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介...
3.Spark编程模型(上)--概念及SparkShell实战.pdf 3.Spark编程模型(下)--IDEA搭建及实战.pdf 4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介...
1. 掌握Spark常用操作。 2. 理解Spark常用API的使用。 3. 掌握编写Spark独立应用程序。编写一个Spark应用程序,对某个文件中的单词进行词频统计。
总的来说,大数据Hadoop MapReduce词频统计是大数据分析的重要应用之一,它揭示了文本数据的内在结构,为文本挖掘、信息检索等应用提供了基础。通过理解和掌握这一技术,开发者可以更好地应对现代数据驱动决策的需求...
【Spark编程模型内幕】 Spark是Apache软件基金会管理的一个开源大数据处理框架,以其高效、易用和可扩展性受到广泛欢迎。Spark的核心编程模型基于弹性分布式数据集(Resilient Distributed Datasets, RDDs),它...
这段代码显然提供了一个简单但功能完备的词频统计实现,帮助用户理解文本的主要构成元素。下面我们将深入探讨词频统计的概念、其在NLP中的应用,以及可能的实现方式。 词频统计是分析文本数据的一种手段,通过计算...
大数据实验报告 Windows 环境下安装 Spark 及 RDD 编程和 Spark 编程实现 wordcount 本实验报告主要介绍了在 Windows 环境下安装 Spark 及 RDD 编程和 Spark 编程实现 wordcount 的步骤和过程。实验中首先安装了 ...
【大数据技术实践之基于Spark的词频统计】项目旨在利用Spark技术对文档中的单词出现次数进行统计,以实现词频分析。此项目的目标是熟练掌握Spark的安装与配置,理解其核心理念,以及如何在实际操作中运用Spark进行大...
Apache Spark是一个开源的大数据处理框架,它基于内存计算...总之,Spark以其强大的功能和灵活性,在大数据处理领域得到了广泛应用,其编程模型和底层架构设计使得它在大规模数据处理方面具备了出色的性能和容错能力。
Scala是一种多范式编程语言,它结合了面向对象和函数式编程的特点,使得Spark代码既能够保持清晰的结构,又能够实现高效的并行计算。 第3章《Spark的设计与运行原理》深入探讨了Spark的架构和核心组件,如RDD(弹性...
Spark编程基础(Python版)是大数据处理领域的重要学习资源,主要针对使用Python语言进行Spark开发的初学者。Spark作为一个快速、通用且可扩展的大数据处理框架,尤其在处理大规模数据时,其性能表现优秀,因此在业界...
《Spark编程基础及项目实践》课程的课后答案涵盖了Spark的核心概念、主要功能以及在实际项目中的应用。这个压缩包包含的资源旨在帮助学生深入理解并掌握Spark编程的关键知识点。 一、Spark概述 Spark是大数据处理...
《Spark编程基础及项目实践》课后习题与答案涵盖了Spark的核心概念,主要涉及RDD(弹性分布式数据集)的操作和编程模型。以下是基于题目内容展开的详细知识点解析: 1. **RDD(Resilient Distributed Dataset)**:...
本次实验以统计莎士比亚作品中出现频率最高的单词为例,演示了如何使用Spark进行词频统计。 **实验数据**: - 数据集:莎士比亚完整作品集。 - 数据集路径:`/data/12/2/`。 #### 三、实验步骤详解 1. **创建单词...
《Spark编程基础及项目实践》课程的课后习题涵盖了Spark的核心概念和关键特性,旨在帮助学生深入理解和应用Spark框架。以下是对习题内容的详细解释: 1. Spark的运行架构: - Driver Program:是应用程序的主要...