2.1 下载Spark
略
2.2 Spark中Python和Scala的shell
Spark shell可用来与分布式存储在许多机器的内存或者硬盘上的数据进行交互,并且处理过程的分发由Spark自动控制完成。
降低shell日志级别:conf目录下创建名为log4j.properties文件,将log4j.properties.template文件中内容复制到log4j.properties文件,找到log4j.rootCategory=INFO, console,将其改为log4j.rootCategory=WARN, console
例2.1: Python行数统计
>>> lines = sc.textFile("README.md") >>> lines.count() 103 >>> lines.first() u'# Apache Spark'
例2-2: Scala行数统计
scala> val lines = sc.textFile("README.md") lines: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at <console>:24 scala> lines.count() res0: Long = 103 scala> lines.first() res1: String = # Apache Spark
2.3 Spark核心概念简介
从上层来看,每个Spark应用都由一个驱动器程序来发起集群上的各种并行操作。驱动器程序包含应用的main函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作。
驱动器程序通过一个SparkContext对象来访问Spark。这个对象代表对计算集群的一个连接。
一旦有了SparkContext,你就可以用它来创建RDD。
要执行这些操作,驱动器程序一般要管理多个执行器节点。比如,如果我们在集群上运行count()操作,那么不同的节点会统计文件的不同部分的行数。
例2-4:Python版本筛选的例子
>>> lines = sc.textFile("README.md") >>> pythonLines = lines.filter(lambda line:"Python" in line) >>> pythonLines.first() u'high-level APIs in Scala, Java, Python, and R, and an optimized engine that'
例2-5:Scala版本筛选的例子
scala> val lines = sc.textFile("README.md") lines: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at <console>:24 scala> val pythonLines = lines.filter(line => line.contains("Python")) pythonLines: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at filter at <console>:26 scala> pythonLines.first() res0: String = high-level APIs in Scala, Java, Python, and R, and an optimized engine that
Spark会自动将函数(比如line.contains("Python"))发到各个执行器节点上。这样,就可以在单一的驱动器程序中编程,并且让代码自动运行在多个节点上。
2.4 独立应用
Spark也可以在Java、Scala或Python的独立程序中被连接使用,这与在shell中使用的区别在于我们需要自行初始化SparkContext。
在Python中,我们可以把应用写成Python脚本,然后用Spark自带的bin/spark-submit脚本来运行。例:bin/spark-submit my_script.py
2.4.1 初始化SparkContext
例2-7:在Python中初始化Spark
from pyspark import SparkConf, SparkContext conf = SparkConf().setMaster("local").setAppName("My App") sc = SparkContext(conf = conf)
例2-8:在Scala中初始化Spark
略
2.4.2 构建独立应用
待学习。