Spark程序 "Hello World!"实例

来源:互联网 发布:淘宝王者代练可靠吗 编辑:程序博客网 时间:2024/06/16 05:36

简单介绍第一个程序"Hello World!",就是存储于HDFS的Log文件中计算出"Hello World!"的行数,存储路径为hdfs://root/Log,计算代码如下:

1
2
3
4
5
var sc=new SparkContext("spark://localhost:6030","Hello world!","YOUR_SPARK_HOME","YOUR_APP_JAR")
var file = sc.textFile("hdfs:////root/Log")
var filterRDD = file.filter(_.contains("Hello World!"))
filterRDD.cache()
filterRDD.count()

行1对于所有的Spark的程序而言,要进行任何操作前需要创建一个Spark的上下文,在创建上下文的过程中,程序会向集群申请资源以及构建相应的运行环境。一般来说,创建SparkContext对象需要传入四个变量如下:

1
2
3
4
1、变量就是Spark程序运行的集群地址,如“spark://localhost:6030”(假设集群在本地启动监听6030端口);
2、参数是Spark程序的标识;
3、参数需要指明Spark安装的路径;
4、参数需要传入Spark程序的jar包路径。


行2通过sc变量利用textFile接口从HDFS文件系统中读取Log文件,返回一个变量file。


行3对于file变量进行过滤操作,传入的参数是一个function对象,function的原型p:(A) => Boolean,对于file中的每行字符串判断是否含有“Hello World!”字符串的文本行数。


行4对filterRdd进行cache操作,以便后续操作重用filterRdd此变量。


行5对filterRdd进行count计数曹总,最后返回包含“Hello World!”字符串的文本行数。


此五行代码涉及了Spark重要的概念,如下:

1、弹性分布式数据集RDD(Resilient Distributed DataSets);


2、创建操作(creation operation):RDD的初始创建都是由SparkContext来负责的,将内存中的集合或者外部文件系统作为输入源;


3、转换操作(transformation operation):将一个RDD通过一定的操作变换成另一个RDD,如file这个RDD通过一个filter操作变换成filterRDD,因此filter就是一个转换操作;


4、控制操作(control operation):对RDD进行持久化,可以让RDD保存在磁盘或者内存中,以便后续重复使用。如cache接口默认将filterRDD缓存在内存中;


5、行动操作(action operation):由于Spark是惰性计算(lazy computing)的,所以对于任何RDD进行行动操作,都会触发Spark作业的运行,从而产生最终的结果。如我们队filterRDD进行的count操作就是一个行动操作。


Spark中的行动操作基本分为两类,一类操作结果变为Scala集合或者标量,另一个就是将RDD报错到外部文件或者数据库中。


转载地址:http://blog.yoodb.com/yoodb/article/detail/216

0 0
原创粉丝点击