1、RDD创建:
(1)从文件系统中加载数据创建RDD
lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
(2)从HDFS中读取并加载数据
>>> lines = sc.textFile("hdfs://localhost:9000/user/hadoop/word.txt")
>>> lines = sc.textFile("/user/hadoop/word.txt")
>>> lines = sc.textFile("word.txt")
(3)通过并行集合(数组)创建RDD
>>> nums = [1,2,3,4,5]
>>> rdd = sc.parallelize(nums)
2、RDD操作:
(1)转换操作
RDD的转换只是记录了轨迹,并没有进行计算,是惰性求值的,遇到行动操作的时候才会真正进行计算。
常见的转换操作有:
filter(func):筛选出满足函数func的元素,并返回一个新的数据集
* map(func):将每个元素传递到函数func中,并将结果返回为一个新的数据集
* flatMap(func):与map()相似,但每个输入元素都可以映射到0或多个输出结果
* groupByKey():应用于(K,V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集
* reduceByKey(func):应用于(K,V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中的每个值是将每个key传递到函数func中进行聚合
(2)行动操作
行动操作是真正触发计算的地方。Spark程序执行到行动操作时,才会执行真正的计算,从文件中加载数据,完成一次又一次转换操作,最终,完成行动操作得到结果。
常见的行动操作有:
*count() 返回数据集中的元素个数
* collect() 以数组的形式返回数据集中的所有元素
* first() 返回数据集中的第一个元素
* take(n) 以数组的形式返回数据集中的前n个元素
* reduce(func) 通过函数func(输入两个参数并返回一个值)聚合数据集中的元素
* foreach(func) 将数据集中的每个元素传递到函数func中运行
3、持久化
为了防止多次计算,速度很慢,可以对代码进行持久化的操作:
rdd.cache() //会调用persist(MEMORY_ONLY),但是,语句执行到这里,并不会缓存rdd,这是rdd还没有被计算生成
再调用一次行动操作就可以将rdd.cache放到缓存里面
4、分区