使用 Spark Shell
基础
Spark 的 shell 作为一个强大的交互式数据分析工具,提供了一个简单的方式来学习 API。它可以使用 Scala(在 Java 虚拟机上运行现有的 Java 库的一个很好方式) 或 Python。在 Spark 目录里使用下面的方式开始运行:
./bin/spark-shell
Spark 最主要的抽象是叫Resilient Distributed Dataset(RDD) 的弹性分布式集合。RDDs 可以使用 Hadoop InputFormats(例如 HDFS 文件)创建,也可以从其他的 RDDs 转换。让我们在 Spark 源代码目录从 README 文本文件中创建一个新的 RDD。
scala> val textFile = sc.textFile("E:\\Spark_Practice\\README.md")
textFile: org.apache.spark.rdd.RDD[String] = E:\Spark_Practice\README.md apPartitionsRDD[5] at textFile at <console>:24
RDD 的 actions 从 RDD 中返回值,transformations 可以转换成一个新 RDD 并返回它的引用。让我们开始使用几个操作:
scala> textFile.count() // RDD 的数据条数
res3: Long = 2
scala> textFile.first() // RDD 的第一行数据
res4: String = 1,5,6,5,9,6,8,5,3,6,8,9,3,0,1,3,4,7,7,2
现在使用一个 transformation,使用 filter 在这个文件里返回一个包含子数据集的新 RDD。
scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[6] at filter at <console>:25
可以把 actions 和 transformations 链接在一起:
scala> textFile.filter(line => line.contains("Spark")).count()
res8: Long = 1
缓存
Spark 支持把数据集拉到集群内的内存缓存中。当要重复访问时这是非常有用的,例如当我们在一个小的热(hot)数据集中查询,或者运行一个像网页搜索排序这样的重复算法。作为一个简单的例子,让我们把 linesWithSpark
数据集标记在缓存中:
scala> linesWithSpark.cache()
res7: spark.RDD[String] = spark.FilteredRDD@17e51082
scala> linesWithSpark.count()
res8: Long = 15
scala> linesWithSpark.count()
res9: Long = 15
在数据集非常大的时候,使用同样的函数,可以使用 bin/spark-shell
连接到一个 cluster 来替换掉编程指南中的方法进行交互操作。