动手实验Apache Spark的最好方式是使用交互式Shell命令行,Spark目前有Python Shell和Scala Shell两种交互式命令行。 可以从 这里下载Apache Spark,下载时选择最近预编译好的版本以便能够立即运行shell。 目前最新的Apache Spark版本是1.5.0,发布时间是2015年9月9日。 tar -xvzf ~/spark-1.5.0-bin-hadoop2.4.tgz 运行Python Shell cd spark-1.5.0-bin-hadoop2.4 ./bin/pyspark 在本节中不会使用Python Shell进行演示。 Scala交互式命令行由于运行在JVM上,能够使用java库。 运行Scala Shell cd spark-1.5.0-bin-hadoop2.4 ./bin/spark-shell 执行完上述命令行,你可以看到下列输出: Scala Shell欢迎信息 Welcome to
/ / ___ __/ / \ / _ / _ `/ __/ '/ // ./_,// //_\ version 1.5.0 // Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_25) Type in expressions to have them evaluated. Type :help for more information. 15/08/24 21:58:29 INFO SparkContext: Running Spark version 1.5.0 下面是一些简单的练习以便帮助使用shell。也许你现在不能理解我们做的是什么,但在后面我们会对此进行详细分析。在Scala Shell中,执行下列操作: 在Spark中使用README 文件创建textFileRDD val textFile = sc.textFile("README.md") 获取textFile RDD的第一个元素 textFile.first() res3: String = # Apache Spark 对textFile RDD中的数据进行过滤操作,返回所有包含“Spark”关键字的行,操作完成后会返回一个新的RDD,操作完成后可以对返回的RDD的行进行计数 筛选出包括Spark关键字的RDD然后进行行计数 val linesWithSpark = textFile.filter(line => line.contains("Spark")) linesWithSpark.count() res10: Long = 19 要找出RDD linesWithSpark单词出现最多的行,可以使用下列操作。使用map方法,将RDD中的各行映射成一个数,然后再使用reduce方法找出包含单词数最多的行。 找出RDD textFile 中包含单词数最多的行 textFile.map(line => line.split(" ").size) .reduce((a, b) => if (a > b) a else b) res11: Int = 14 返回结果表明第14行单词数最多。 也可以引入其它java包,例如 Math.max()方法,因为map和reduce方法接受scala函数字面量作为参数。 在scala shell中引入Java方法 import java.lang.Math textFile.map(line => line.split(" ").size) .reduce((a, b) => Math.max(a, b)) res12: Int = 14 我们可以很容易地将数据缓存到内存当中。 将RDD linesWithSpark 缓存,然后进行行计数 linesWithSpark.cache() res13: linesWithSpark.type = MapPartitionsRDD[8] at filter at :23 linesWithSpark.count() res15: Long = 19 上面简要地给大家演示的了如何使用Spark交互式命令行。 弹性分布式数据集(RDDs) Spark在集群中可以并行地执行任务,并行度由Spark中的主要组件之一——RDD决定。弹性分布式数据集(Resilient distributed data, RDD)是一种数据表示方式,RDD中的数据被分区存储在集群中(碎片化的数据存储方式),正是由于数据的分区存储使得任务可以并行执行。分区数量越多,并行越高。下图给出了RDD的表示: Display- Edit 想像每列均为一个分区(partition ),你可以非常方便地将分区数据分配给集群中的各个节点。 为创建RDD,可以从外部存储中读取数据,例如从Cassandra、Amazon简单存储服务(Amazon Simple Storage Service)、HDFS或其它Hadoop支持的输入数据格式中读取。也可以通过读取文件、数组或JSON格式的数据来创建RDD。另一方面,如果对于应用来说,数据是本地化的,此时你仅需要使用parallelize方法便可以将Spark的特性作用于相应数据,并通过Apache Spark集群对数据进行并行化分析。为验证这一点,我们使用Scala Spark Shell进行演示
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。