【Spark分布式内存计算框架——Spark Core】5. RDD 函数补充:关联函数与练习

关联函数

当两个RDD的数据类型为二元组Key/Value对时,可以依据Key进行关联Join。
在这里插入图片描述
首先回顾一下SQL JOIN,用Venn图表示如下:
在这里插入图片描述
RDD中关联JOIN函数都在PairRDDFunctions中,具体截图如下:
在这里插入图片描述
具体看一下join(等值连接)函数说明:
在这里插入图片描述
范例演示代码:

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* RDD中关联函数Join,针对RDD中数据类型为Key/Value对
*/
object SparkJoinTest {
def main(args: Array[String]): Unit = {
// 创建应用程序入口SparkContext实例对象
val sc: SparkContext = {
// 1.a 创建SparkConf对象,设置应用的配置信息
val sparkConf: SparkConf = new SparkConf()
.setAppName(this.getClass.getSimpleName.stripSuffix("$"))
.setMaster("local[2]")
// 1.b 传递SparkConf对象,构建Context实例
new SparkContext(sparkConf)
}
sc.setLogLevel("WARN")
// 模拟数据集
val empRDD: RDD[(Int, String)] = sc.parallelize(
Seq((1001, "zhangsan"), (1002, "lisi"), (1003, "wangwu"), (1004, "zhangliu"))
)
val deptRDD: RDD[(Int, String)] = sc.parallelize(
Seq((1001, "sales"), (1002, "tech"))
)
/*
def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))]
*/
val joinRDD: RDD[(Int, (String, String))] = empRDD.join(deptRDD)
println(joinRDD.collectAsMap())
/*
def leftOuterJoin[W](other: RDD[(K, W)]): RDD[(K, (V, Option[W]))]
*/
val leftJoinRDD: RDD[(Int, (String, Option[String]))] = empRDD.leftOuterJoin(deptRDD)
println(leftJoinRDD.collectAsMap())
// 应用程序运行结束,关闭资源
sc.stop()
}
}

函数练习

RDD中的函数有很多,不同业务需求使用不同函数进行数据处理分析,下面仅仅展示出比较常用的函数使用,更多函数在实际中使用体会,多加练习理解。

map 函数
对RDD中的每一个元素进行操作并返回操作的结果。
在这里插入图片描述
filter 函数
函数中返回True的被留下,返回False的被过滤掉。

在这里插入图片描述
flatMap 函数
对RDD中的每一个元素进行先map再压扁,最后返回操作的结果。
在这里插入图片描述
交集、并集、差集、笛卡尔积
数学集合中操作,类似Scala集合类Set中相关函数,注意类型要一致。
在这里插入图片描述
distinct 函数
对RDD中元素进行去重,与Scala集合中distinct类似。
在这里插入图片描述
first、take、top 函数
从RDD中获取某些元素,比如first为第一个元素,take为前N个元素,top为最大的N个元素。
在这里插入图片描述
keys、values 函数
针对RDD中数据类型为KeyValue对时,获取所有key和value的值,类似Scala中Map集合。
在这里插入图片描述
mapValues 函数
mapValues表示对RDD中的元素进行操作,Key不变,Value变为操作之后。
在这里插入图片描述
collectAsMap 函数
当RDD中数据类型为Key/Value对时,转换为Map集合。
在这里插入图片描述

mapPartitionsWithIndex 函数
取分区中对应的数据时,还可以将分区的编号取出来,这样就可以知道数据是属于哪个分区的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdnGuoYuying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值