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

文章目录

  • 1.四种Join操作
    • 1.1 join
    • 1.2 leftOuterJoin
    • 1.3 rightOuterJoin
    • 1.4 fullOuterJoin
  • 2.Option对象
    • 为什么要使用Option

1.四种Join操作

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

  • join
  • leftOuterJoin
  • rightOuterJoin
  • fullOuterJoin

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

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

Name Sex
Tom Male
Pig Female
Apple Male
Kaggle Male
Que Female

ageTable: RDD[(String, String)]

Name Age
Tom 15
Pig 16
Apple 17
Fey 18
Wow 19

1.1 join

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

sexTable.join(ageTable)

Name Sex Age
Tom Male 15
Pig Female 16
Apple Male 17

ageTable.join(sexTable)

Name Age Sex
Tom 15 Male
Pig 16 Female
Apple 17 Male

1.2 leftOuterJoin

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

1 2 3
Tom Male Some(15)
Pig Female Some(16)
Apple Male Some(17)
Kaggle Male None
Que Female None

1.3 rightOuterJoin

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

1 2 3
Tom Some(Male) 15
Pig Some(Female) 16
Apple Some(Male) 17
Fey None 18
Wow None 19

1.4 fullOuterJoin

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

1 2 3
Tom Some(Male) Some(15)
Pig Some(Female) Some(16)
Apple Some(Male) Some(17)
Kaggle Some(Male) None
Que Some(Female) None
Fey None Some(18)
Wow None Some(19)

2.Option对象

Scala Option对象类型,从名字可以看得出来,它是用来表示一个值是可选的(有值或无值);
Option[T]是一个类型为 T 的可选值的容器(相当于这个容器的size只能是0或1):如果值存在Option[T]就是对象Some[T]; 如果不存在,Option[T]就是对象None
Spark学习|Spark中的四种Join操作_第1张图片

为什么要使用Option

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

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

参考文章1
参考文章2

你可能感兴趣的:(Spark)