http://spark.apache.org/docs/latest/rdd-programming-guide.html
(1)spark_submit传命令文件参数:
–master
–core
–memory
等的参数设置;
包括一些api属性设置及运行环境设置;
通常的两大步骤
声明sparkContext
conf= spark.Conf().setAppName(‘XX’).setMaster(‘local’)
sc = SparkContext(conf=conf)注意此处sc不能命名成别的名字,否则无效;
(2)明确分布式文件的概念,一个简单的语句:
a =[1,2,3,4,5]
a_1 = sc.parallelize(a)
看似简单,但是原来一个很普通的数据啊,经过sc.parallelize之后,立马变成分布式的数据了,变成一个以line为每一行一行的数据了,我们可以对他进行操作,其每一行就是对应a中的元素,可以做a_1.reduce(lambda a,b : a+b);
(3)明确RDD的概念
RDD是一种分布式文件,它可以通过一定的索引方式将存储在多台分布式机器上的数据读取到,形成给人的感觉就像是直接读的本地一个文件一样,很厉害的机制,可以仔细研究研究;
(4)读取文件
sc.textFile()可以将文件解析成一行一行的,便于做map\reduce操作;
例如a=sc.textFile(’/a.txt’),这样读取之后a就是一行一行的了,并且是分布式的,可以进行a.map(lambda s:len(s)).reduce(lambda a,b:a+b);相当于实现了计算a文件每一行的长度,之后再将所有行的计算的长度之和相加;
相反,sc.wholeTextFiles则和sc.textFile()相反,它是将多行的文件合并成一个总体的文件;
(5)可以看出,rdd数据map之后是一堆key-value文件对;
官方文档场景:
Saving and Loading SequenceFiles
Similarly to text files, SequenceFiles can be saved and loaded by specifying the path. The key and value classes can be specified, but for standard Writables this is not required
>>> rdd = sc.parallelize(range(1, 4)).map(lambda x: (x, "a" * x))
>>> rdd.saveAsSequenceFile("path/to/file")
>>> sorted(sc.sequenceFile("path/to/file").collect())
[(1, u'a'), (2, u'aa'), (3, u'aaa')]