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##