快速区分 spark 四种关联方式(结论适用于 sql)

关联操作是 spark 或 sql 中常用的操作, 这里以 spark 为例,区别四种不同的 join 方式

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python3
# -*- coding utf-8 -*-
from pyspark import SparkContext

sc = SparkContext("local")

x = sc.parallelize([("a", 1), ("b", 4)])
y = sc.parallelize([("a", 2), ("a", 3), ("c", 5)])

print("join:", sorted(x.join(y).collect()))
print("leftOuterJoin:", sorted(x.leftOuterJoin(y).collect()))
print("rightOuterJoin:", sorted(x.rightOuterJoin(y).collect()))
print("fullOuterJoin:", sorted(x.fullOuterJoin(y).collect()))

输出:

1
2
3
4
          join: [('a', (1, 2)), ('a', (1, 3))]              
leftOuterJoin: [('a', (1, 2)), ('a', (1, 3)), ('b', (4, None))]
rightOuterJoin: [('a', (1, 2)), ('a', (1, 3)), ('c', (None, 5))]
fullOuterJoin: [('a', (1, 2)), ('a', (1, 3)), ('b', (4, None)), ('c', (None, 5))]

结论:

  • join (INNER JOIN):如果两个rdd(sql表)中的数据有至少一个匹配,则返回行
  • leftOuterJoin (LEFT JOIN):以左边的 rdd (左sql表) 为基准, 返回所有匹配的值,不能匹配的用 None 填充
  • rightOuterJoin (RIGHT JOIN):以右边的 rdd (右sql表) 为基准, 返回所有匹配的值,不能匹配的用 None 填充
  • fullOuterJoin (FULL JOIN):返回左右两个 rdd (两个 sql表) 所有的行, 不匹配的用 None 填充

文章标题:快速区分 spark 四种关联方式(结论适用于 sql)

文章字数:295

本文作者:Waterandair

发布时间:2018-01-09, 11:20:47

最后更新:2019-12-28, 14:03:59

原始链接:https://waterandair.github.io/2018-01-09-spark-and-sql-join-pattern.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

github