PySpark实战:fullOuterJoin操作

来自CloudWiki
跳转至: 导航搜索

介绍

fullOuterJoin操作是一个变换算子,调用形式为rdd.fullOuterJoin(otherRDD,numPartitions=None),它返回此RDD和另一个oherRDD的全外部连接(full outer join)。

对于RDD自身中的每个元素(k,v) ,如果另外一个otherRDD匹配到k ,那么生成的RDD元素格式为(k,(v,w)),如果另外一个otherRDD匹配不到k,则生成的RDD元素格式为(k,(v,None))

如果另外一个otherRDD匹配k,但是在RDD自身没有匹配到值w ,则返回None. 则生成的RDD元素格式为(k,(None,w))

代码

import findspark
findspark.init()
##############################################
from pyspark.sql import SparkSession
spark = SparkSession.builder \
        .master("local[1]") \
        .appName("RDD Demo") \
        .getOrCreate();
sc = spark.sparkContext
#############################################
x = sc.parallelize([("a", 1), ("b", 4)])
y = sc.parallelize([("a", 2), ("c", 8)])
rdd = x.fullOuterJoin(y)
# [('b', (4, None)), ('c', (None, 8)), ('a', (1, 2))]
print(rdd.collect())
##############################################
sc.stop()

输出

[('b', (4, None)), ('c', (None, 8)), ('a', (1, 2))]