##安装Spark
通过 http://spark.apache.org/downloads.html 下载最新Spark,目前是1.0.2版本。
下载后解压到/opt/spark-1.0.2-bin-hadoop2
也可以通过源码进行编译
|
|
启动本地模式,可以使用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)]