Spark学习|Spark中的四种Join操作

1.四种Join操作

Join操作在特征提取的过程是一个经常使用的操作,当从多个数据源提取特征之后,使用Join操作将数据合并成一个完整的特征数据,以供后续的使用。
这里记录Spark中的四种Join操作的学习记录:

  • join
  • leftOuterJoin
  • rightOuterJoin
  • fullOuterJoin

注意:以上四种Join操作均是Spark中对PairRDD的操作

为了讲清楚更加的形象的理解四种操作的效果,使用两个表格,后续笔记记录基于这两个表格
sexTable: RDD[(String, String)]

NameSex
TomMale
PigFemale
AppleMale
KaggleMale
QueFemale

ageTable: RDD[(String, String)]

NameAge
Tom15
Pig16
Apple17
Fey18
Wow19

1.1 join

  • join函数输出两个RDD中相同Key的所有项(类似于SQL中的inner join)。
  • 注意:join不满足交换律,就是说sexTable.join(ageTable)ageTable.join(sexTable)的结果是不一样的

sexTable.join(ageTable)

NameSexAge
TomMale15
PigFemale16
AppleMale17

ageTable.join(sexTable)

NameAgeSex
Tom15Male
Pig16Female
Apple17Male

1.2 leftOuterJoin

leftOuterJoin会保留对象的所有key,如sexTable.leftOuterJoin(ageTable)保留了sexTable中的所有key,而且ageTable中的value部分转换为Option对象保存
sexTable.leftOuterJoin(ageTable)

123
TomMaleSome(15)
PigFemaleSome(16)
AppleMaleSome(17)
KaggleMaleNone
QueFemaleNone

1.3 rightOuterJoin

rightOuterJoin与leftOuterJoin,不过变成了保留参数对象的所有key
sexTable.rightOuterJoin(ageTable)

123
TomSome(Male)15
PigSome(Female)16
AppleSome(Male)17
FeyNone18
WowNone19

1.4 fullOuterJoin

fullOuterJoin中保留两个RDD中的所有key,因此所有的值列都可能出现缺失的情况,所有所有值列都转换为Option对象
sexTable.fullOuterJoin(ageTable)

123
TomSome(Male)Some(15)
PigSome(Female)Some(16)
AppleSome(Male)Some(17)
KaggleSome(Male)None
QueSome(Female)None
FeyNoneSome(18)
WowNoneSome(19)

2.Option对象

Scala Option对象类型,从名字可以看得出来,它是用来表示一个值是可选的(有值或无值);
Option[T]是一个类型为 T 的可选值的容器(相当于这个容器的size只能是0或1):如果值存在Option[T]就是对象Some[T]; 如果不存在,Option[T]就是对象None
在这里插入图片描述

为什么要使用Option

《Java编程思想》中,作者说“万物皆对象”,但在Java中想要返回一个空对象时,返回的是一个Null关键字。不知道大家是否有过疑问,为什么在希望返回一个对象的时候返回的是一个关键字?
为了让所有东西都是对象的目标更加一致,Scala中使用Option对象来代替可能出现的"空"的情况。
在scala中,None被声明为一个对象而不是一个类,因为我们只需要它的一个实例。

注意:如果对None使用 get()方法,Scala一样会抛出一个 NoSuchElementException异常

参考文章1
参考文章2

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值