关联函数: 主要是针对KV类型的数据, 根据key进行关联操作
相关的算子:
join: 实现两个RDD的内连接 (取公共部分)
leftOuterJoin: 实现两个RDD的左连接(左边RDD的数据都要, 右边进行匹配, 匹配不上用Null)
rightOuterJoin:实现两个RDD的右连接(右边RDD的数据都要, 左边进行匹配, 匹配不上用Null)
fullOuterJoin: 实现两个RDD的满外连接(左右两边的RDD数据都要, 匹配不上用null)
准备数据集:
rdd1 = sc.parallelize([('c01','张三'),('c02','李四'),('c01','王五'),('c01','赵六'),('c02','田七'),('c03','周八')])
rdd2 = sc.parallelize([('c01','大数据1期'),('c02','大数据2期'),('c04','大数据4期')])
演示: Join操作:
rdd1.join(rdd2).collect()
结果:
[
('c01', ('张三', '大数据1期')),
('c01', ('王五', '大数据1期')),
('c01', ('赵六', '大数据1期')),
('c02', ('李四', '大数据2期')),
('c02', ('田七', '大数据2期'))
]
演示: 左关联 和 右关联
rdd1.leftOuterJoin(rdd2).collect()
结果:
[
('c01', ('张三', '大数据1期')),
('c01', ('王五', '大数据1期')),
('c01', ('赵六', '大数据1期')),
('c02', ('李四', '大数据2期')),
('c02', ('田七', '大数据2期')),
('c03', ('周八', None))
]
rdd1.rightOuterJoin(rdd2).collect()
结果
[
('c04', (None, '大数据4期')),
('c01', ('张三', '大数据1期')),
('c01', ('王五', '大数据1期')),
('c01', ('赵六', '大数据1期')),
('c02', ('李四', '大数据2期')),
('c02', ('田七', '大数据2期'))
]
演示: 全外关联
rdd1.fullOuterJoin(rdd2).collect()
结果:
[
('c04', (None, '大数据4期')),
('c01', ('张三', '大数据1期')),
('c01', ('王五', '大数据1期')),
('c01', ('赵六', '大数据1期')),
('c02', ('李四', '大数据2期')),
('c02', ('田七', '大数据2期')),
('c03', ('周八', None))
]