Spark学习_5(常用RDD学习_上)

引言:

该部分内容主要是学习常见的几个RDD算子,并且通过几个综合示例来加强理解。RDD是一个只读的,可分区的分布式数据集,可以全部内容或部分内容缓存在内存。

RDD编程基础

转换算子:每一次转换(Transformation)操作都会产生新的RDD,但是RDD的转换过程是惰性求值的,所以说转换操作只记录转换过程,不实际计算。只有发生行动操作时才进行计算,常用算子如下:
fileter(func):筛选满足函数func的元素,并返回一个新的数据集

val lines=sc.textFile(“file:///usr/java/test/word.txt”)
val word=lines.fileter(line=>line.contains(“spark”))

map(func):将每个元素传递到func中。

val Array1=Array(1,2,3,4,5)
val rdd1=sc.parallelize(Array1)
val rdd2=rdd1.map(x=>x+1)

flatMap(func):与map()相似,先做map操作,然后再做flat(拍扁)操作

val lines=sc.textFile(“file:///usr/java/test/word.txt”)
val word=lines.flatMap(line=>line.split(“ ”))

groupByKey():应用于(K,V)键值对的数据集,返回一个新的(K,Iterable)形式的数据集,Iterable是一种可迭代的集合。groupByKey把所有key相同的value都组织成一个value-list,保存在一个可迭代的集合Iterable中。RDD中每个元素都是(key,valuelist)的形式:

(is,CompactBuffer(1, 1))
(ove,CompactBuffer(1))
(hello,CompactBuffer(1))
(hahah,CompactBuffer(1))
(not,CompactBuffer(1))
(spark,CompactBuffer(1, 1, 1))
(hadoop,CompactBuffer(1))
(I,CompactBuffer(1))
(lm,CompactBuffer(1))
(good,CompactBuffer(1, 1))

reduceByKey(func):应用于(K,V)键值对的数据集,返回一个新的(K,V)形式的数据集,其中每个值都是将每个Key传递到函数func中进行聚合后得到的结果。
行动算子:行动操作才是真正计算的地方。
count():返回数据集中的元素个数

val rdd=sc.parallelize(Array(1,2,3))
rdd.count()

输出:Long=5
collect:以数组的形式返回数据集中的所有元素

val rdd=sc.parallelize(Array(1,2,3))
rdd.collect()

输出:Array[Int] = Array(1, 2, 3)
first():回数据集第一个元素。
take(n):以数组的形式返回前n个
reduce(func):通过函数func聚合数据集中的元素

val rdd=sc.parallelize(Array(1,2,3))
rdd.reduce((a,b)=>a+b)

输出:int=15
foreach(func):将数据集中的每个元素传递到函数func中运行

val rdd=sc.parallelize(Array(1,2,3))
rdd.foreach(elem=>print(elem))

持久化算子:由于spark的惰性机制,导致每次遇到行动操作,都会触发一次从头开始的计算,这样加大了计算量。因此当需要使用同一组数据时,往往采用持久化计算来简化计算量。
综合实例:将本地一个文件word.txt进行词频统计,文件由多行英语单词组成

val lines=sc.textFile(“file:///usr/java/test/word.txt”)
val rdd1=lines.flatMap(line=>line.split(“ ”))
val rdd2=rdd1.map(word=>(word,1))
val rdd3=rdd2.reduceByKey((a,b)=>a+b)
rdd3.collect
rdd3.foreach(println)

键值对操作:

reduceByKey(),同上
groupByKey(),同上
keys:键值对RDD每个元素都是(Key,Value)的形式,keys操作只会把键值对中的key返回

rdd.key.foreach(println)

输出:
在这里插入图片描述
values:values操作只会把键值对中的key返回
在这里插入图片描述
sortByKey():默认是升序排列,通过key进行排序
在这里插入图片描述
如果想降序排列,形式sortByKey(false)即可
在这里插入图片描述
sortBy:sortByKey可以根据rdd中的key值进行排列,但无法对value值进行排列故设置sortBy(_._2)表示对value进行排序

d1.reduceByKey((a,b)=>a+b).sortBy(_._2).collect

mapValues(func):mapVales是对rdd中的每个value都应用一个函数,但是,key不会变化

d1.mapValues(x=>x+1)

join():表示内连接,对于两个输入数据集(K,V1)和(K,V2),只有在两个rdd数据集都存在的key才会被输出,最终获得一个(k,(v1,v2))类型的数据集在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值