前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pyspark学习笔记(五)RDD操作(四)_RDD连接/集合操作

Pyspark学习笔记(五)RDD操作(四)_RDD连接/集合操作

作者头像
TeeyoHuang
发布2022-09-23 16:48:02
1.2K0
发布2022-09-23 16:48:02
举报
在这里插入图片描述
在这里插入图片描述

Pyspark学习笔记(五)RDD操作(四)_RDD连接/集合操作

文章目录


# 前言 本篇博客讲的是RDD的连接/集合操作

1.join-连接

对应于SQL中常见的JOIN操作 菜鸟教程网关于SQL连接总结性资料 Pyspark中的连接函数要求定义键,因为连接的过程是基于共同的字段(键)来组合两个RDD中的记录,因此需要操作键值对RDD

代码语言:javascript
复制
rdd_1 = sc.parallelize([('USA', (1,2,3)), ('CHINA', (4,5,6)), ('RUSSIA', (7,8,9))])
rdd_2 = sc.parallelize([('UK', (3,3,3)), ('FRANCE', (7,7,7)), ('USA', (9,9,9))])

1.1. innerjoin-内连接

join(other, numPartitions) 官方文档:pyspark.RDD.join 内连接通常就被简称为连接,或者说平时说的连接其实指的是内连接。

代码语言:javascript
复制
rdd_join_test = rdd_1.join(rdd_2)
print(rdd_join_test.collect())
#output
[('USA', ((1,2,3), (9,9,9)))]

1.2. leftOuterJoin-左连接

leftOuterJoin(other, numPartitions) 官方文档:pyspark.RDD.leftOuterJoin 以“左侧”的RDD的key为基准,join上“右侧”的RDD的value, 如果在右侧RDD中找不到对应的key, 则返回 none

代码语言:javascript
复制
rdd_leftOuterJoin_test = rdd_1.leftOuterJoin(rdd_2)
print(rdd_leftOuterJoin_test.collect())
#output
[('USA', ((1,2,3), (9,9,9))), ('CHINA', ((4,5,6), None)), ('RUSSIA', ((7,8,9), None))]

1.3. rightOuterJoin-右连接

rightOuterJoin(other, numPartitions) 官方文档:pyspark.RDD.rightOuterJoin 以“右侧”的RDD的key为基准,join上“左侧”的RDD的value, 如果在左侧RDD中找不到对应的key, 则返回 none

代码语言:javascript
复制
rdd_rightOuterJoin_test = rdd_1.rightOuterJoin(rdd_2)
print(rdd_rightOuterJoin_test.collect())
#output
[('USA', ((1,2,3), (9,9,9))), ('UK', (None, (3,3,3))), ('FRANCE', (None, (7,7,7))]

1.4. fullOuterJoin-全连接

fullOuterJoin(other, numPartitions) 官方文档:pyspark.RDD.fullOuterJoin 两个RDD中各自包含的key为基准,能找到共同的Key,则返回两个RDD的值,找不到就各自返回各自的值,并以none****填充缺失的值

代码语言:javascript
复制
rdd_fullOuterJoin_test = rdd_1.fullOuterJoin(rdd_2)
print(rdd_fullOuterJoin_test.collect())
#output
[('USA', ((1,2,3), (9,9,9))), ('CHINA', ((4,5,6), None)), ('RUSSIA', ((7,8,9), None)), ('UK', (None, (3,3,3))), ('FRANCE', (None, (7,7,7))]

1.5 cogroup

cogroup(other, numPartitions) 官方文档:pyspark.RDD.cogroup 实现过程和全连接其实差不多,就是数据的表现形式有点区别 生成的并不是一个新的键值对RDD,而是一个可迭代的对象 rdd_cogroup_test = rdd_1.cogroup(rdd_2) print(rdd_cogroup_test.collect()) #会发现直接输出的话,输出的是可迭代对象的地址

代码语言:javascript
复制
[('USA', (<pyspark.resultiterable.ResultIterable at xxxxxxxxx>, <pyspark.resultiterable.ResultIterable at xxxxxxxxx>)), ..., ]
#因为该函数输出的格式就是: RDD[Tuple[K, Tuple[ResultIterable[V], ResultIterable[U]]]]

想要看明文的结果的话,可以如下

代码语言:javascript
复制
print((k, tuple(map(list, v))) for k, v in list(rdd_cogroup_test.collect()))
[('USA', ((1,2,3), (9,9,9))), ('CHINA', ([(4,5,6)], [])), ('RUSSIA', ([(7,8,9)], [])), ('UK', ([], [(3,3,3)])), ('FRANCE', ([], [(7,7,7)])]

1.6 cartesian

cartesian(other) 官方文档:pyspark.RDD.cartesian 这个就是笛卡尔积,也被称为交叉连接,它会根据两个RDD的所有条目来进行所有可能的组合。 要注意这个操作可能会产生大量的数据,一般还是不要轻易使用。

2.Union-集合操作

2.1 union

union(other) 官方文档:pyspark.RDD.union 转化操作union()把一个RDD追加到另一个RDD后面,两个RDD的结构并不一定要相同(即不一定列数要相同),并且union并不会过滤重复的条目。

2.2 intersection

intersection(other) 官方文档:pyspark.RDD.intersection 返回两个RDD中共有的元素,要注意,和 join 其实并不一样,join操作只是要求 key一样,而intersection 并不要求有key,是要求两边的条目必须是一模一样,即每个字段(列)上的数据都要求能保持一致,即【完全一样】的两行条目,才能返回。

2.3 subtract

subtract(other, numPartitions) 官方文档:pyspark.RDD.subtract 这个名字就说明是在做“减法”,即第一个RDD中的元素 减去 第二个RDD中的元素,返回第一个RDD中有,但第二个RDD中没有的元素。

2.4 subtractByKey

subtractByKey(other, numPartitions) 官方文档:pyspark.RDD.subtractByKey 该操作和上面的subtract类似,只不过这里是以Key作为参照了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pyspark学习笔记(五)RDD操作(四)_RDD连接/集合操作
    • 文章目录
    • 1.join-连接
      • 1.1. innerjoin-内连接
        • 1.2. leftOuterJoin-左连接
          • 1.3. rightOuterJoin-右连接
            • 1.4. fullOuterJoin-全连接
              • 1.5 cogroup
                • 1.6 cartesian
                • 2.Union-集合操作
                  • 2.1 union
                    • 2.2 intersection
                      • 2.3 subtract
                        • 2.4 subtractByKey
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档