Spark第一步

##安装Spark

通过 http://spark.apache.org/downloads.html 下载最新Spark,目前是1.0.2版本。
下载后解压到/opt/spark-1.0.2-bin-hadoop2

也可以通过源码进行编译

1
sbt/sbt -Dhadoop.version=2.2.0 -Pyarn assembly

启动本地模式,可以使用pyspark启动,用于开发环境,这里主要讲Python环境

cd /opt/spark-1.0.2-bin-hadoop2

./bin/pyspark --master local[4]

通过如下指令,可以加载数据文件people.txt

Michael, 29
Andy, 30
Justin, 19

sc是pyspark中已经定义的一个变量, sc = SparkContext(…),可以直接使用。sc.textFile加载TXT数据文件

lines = sc.textFile("examples/src/main/resources/people.txt")

map函数是MapReduce里面的map动作,可以使用lambda处理简单的逻辑,或者直接写python代码。这里是用”,”把每一行分隔成数组。

parts = lines.map(lambda l:l.split(","))

可以使用collect()方法打印parts的内容,比如parts.collect()输出结果是

[[u'Michael', u' 29'], [u'Andy', u' 30'], [u'Justin', u' 19']]

reduceByKey是根据map出来的key做reduce,比如counts = parts.reduceByKey(lambda a, b: a + b)

完整的代码如下:

lines = sc.textFile("examples/src/main/resources/people.txt")
parts = lines.map(lambda l:l.split(","))
parts = parts.map(lambda p:(p[0].strip(), int(p[1].strip())))
counts = parts.reduceByKey(lambda a, b: a + b)
counts.collect()

#输出
[(u'Michael', 29), (u'Andy', 30), (u'Justin', 19)]

如果people.txt中的数据是下面的:

Michael, 29
Andy, 30
Justin, 19
Michael, 11
Justin, 20

那么counts.collect()的输出结果就是下面的情况了

[(u'Michael', 40), (u'Andy', 30), (u'Justin', 39)]