1. RDD基本概念
RDD——分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错,位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。
2. 创建RDD
- 由本地系统创建
val rdd1 = sc.textFile("file:///export/data/wordcount.txt")
- 由Scala已知集合创建
val rdd2 = sc.parallelize(Array(1,2,3,4,5,6))
3. RDD编程API
命令 | 含义 |
---|
map() | 返回一个新的rdd,由()转换后组成 | filter() | 过滤,由()函数计算后返回值为true的元素组成 | flatMap() | 类似于map,但输入元素可以被映射,用于词频拆分 | union() | 相当于数学中集合的并集 | intersection() | 相当于数学中集合的交集 | distinct() | 去重操作后返回一个新的rdd | groupByKey() | 返回一个(l,iterator[数据类型]) 的rdd | reduceByKey() | 在一个(k,v)对的rdd上调用,返回一个新的(k,v)对rdd,用于词频统计 | sortByKey | 在一个(k,v)对的rdd上调用,第二个值为true时按从小到大排序,false为从大到小排序 | join() | 返回相同的key对应的所有元素,如(K,(V,W)) |
3.1 练习
启动spark-shell
cd /export/software/spark-2.1.0
spark-shell
练习1:
//并行化生成一个rdd
val rdd1 = sc.parallelize(List(5,6,4,7,3,8,2,9,1,10))
//对rdd1里面每一个元素乘2然后排序
val rdd2 = rdd1.map(x=>x*2)
val rdd3 = rdd2.sortByKey(x=>x,true)
//过滤出大于等于十的元素
val rdd4 = rdd3.filter(x=>x>=10)
//最终查看
rdd4.collect
练习2:
val rdd1 = sc.parallelize(Array("a b c", "d e f", "h i j"))
//拆分rdd1每一个元素
val rdd2 = rdd1.flatMap(x=>x.split(" "))
//查看
rdd2.collect
练习3:
val rdd1 = sc.parallelize(List(5, 6, 4, 3))
val rdd2 = sc.parallelize(List(1, 2, 3, 4))
//求并集
val rdd3 = rdd1.union(rdd2)
//求交集
val rdd4 = rdd1.intersection(rdd2)
//去重
val rdd5 = rdd4.distinct()
//查看
rdd5.collect
练习4:
val rdd1 = sc.parallelize(List(("tom", 1), ("jerry", 3), ("kitty", 2)))
val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2)))
//求join
val rdd3 = rdd1.join(rdd2)
//求并集
val rdd4 = rdd1.union(rdd2)
//按key分组
val rdd5 = rdd4.groupByKey()
//查看
rdd5.collect
练习5:
val rdd1 = sc.parallelize(List(("tom", 1), ("tom", 2), ("jerry", 3), ("kitty", 2)))
val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2)))
//join
val all = rdd1.join(rdd2)
//分组
val group = all.groupByKey()
//查看
group.collect
|