sparkNote - juedaiyuer/researchNote GitHub Wiki

#spark初步笔记#

spark摘抄

分布式存储框架(Google文件系统),在Hadoop中被实现为HDFS;
分布式计算框架(MapReduce)
通用的资源管理框架---YARN

Spark使用内存缓存来提升性能,因此进行交互式分析也足够快速,如同Python解释器,与集群进行交互一样

##设置Spark##

确保java程序在PATH环境变量,或者设置了JAVA_HOME环境变量
python也要在PATH中

##Spark的执行##

###与Spark交互

pyspark

pyspark将会自动使用本地Spark配置创建一个SparkContext,通过sc变量来访问它,我们来创建一个RDD,文件路径是相对于当前工作目录的一个相对路径

>>> text=sc.textFile("README.md")
>>> print text
README.md MapPartitionsRDD[1] at textFile at NativeMethodAccessorImpl.java:-2

将文本拆分为单词,根据空格拆分的单词列表;flatMap操作符对textRDD进行变换创建一个wordsRDD

>>> from operator import add
>>> def tokenize(text):
...     return text.split()
...
>>> words = text.flatMap(tokenize)
>>> print words
PythonRDD[2] at RDD at PythonRDD.scala:43

将每个单词映射到一个键值对,其中键是单词,值是1,然后使用reduce计算键总数

首先map

使用一个匿名函数,用了python中的lambda关键字,映射到每个单词;x为一个word,每个单词都会被匿名闭包转换为元组(word,1)

使用toDebugString方法来查看PipelinedRDD是怎么被转换的

>>> wc=words.map(lambda x:(x,1))
>>> print wc.toDebugString()
(2) PythonRDD[3] at RDD at PythonRDD.scala:48 []
 |  README.md MapPartitionsRDD[1] at textFile at NativeMethodAccessorImpl.java:-2 []
 |  README.md HadoopRDD[0] at textFile at NativeMethodAccessorImpl.java:-2 []

使用reduceByKey动作进行字数统计,然后把统计结果写到磁盘

>>> counts=wc.reduceByKey(add)
>>> counts.saveAsTextFile("wc")

查看当前工作目录下,有一个wc目录

$ ls
part-00000  part-00001  _SUCCESS

对一个part文件进行head命令,看到字数统计元组

$ head part-00000(u'when', 1)
(u'R,', 1)
(u'including', 3)
(u'computation', 1)
(u'using:', 1)
(u'guidance', 2)
(u'Scala,', 1)
(u'environment', 1)
(u'only', 1)
(u'rich', 1)

##source##

Spark入门(Python)