如何在PySpark中对两个含id列的DataFrame执行全外连接
没问题,这就帮你实现两个PySpark DataFrame的全外连接操作!
第一步:确认已创建的DataFrame
先回顾你给出的两个DataFrame创建代码,确保数据准备正确:
# 创建DataFrame a valuesA = [('Pirate',1),('Monkey',2),('Ninja',3),('Spaghetti',4)] a = sqlContext.createDataFrame(valuesA,['name','id']) a.show() # 创建DataFrame b valuesB = [('dave',1),('Thor',2),('face',3), ('test',5)] b = sqlContext.createDataFrame(valuesB,['Movie','id']) b.show()
第二步:执行全外连接
PySpark提供了两种常用方式来实现全外连接,选你习惯的就行:
方式一:使用DataFrame API(推荐)
直接调用fullOuterJoin方法,指定连接键为共有的id列:
# 执行全外连接 full_join_result = a.join(b, on='id', how='full_outer') full_join_result.show()
执行后会得到如下结果:
+---+---------+-----+ | id| name|Movie| +---+---------+-----+ | 1| Pirate| dave| | 2| Monkey| Thor| | 3| Ninja| face| | 4|Spaghetti| null| | 5| null| test| +---+---------+-----+
方式二:使用SQL语法
如果你更熟悉SQL,可以先把DataFrame注册成临时视图,再用SQL语句实现:
# 注册临时视图 a.createOrReplaceTempView("table_a") b.createOrReplaceTempView("table_b") # 执行SQL全外连接 full_join_sql_result = sqlContext.sql("SELECT * FROM table_a FULL OUTER JOIN table_b ON table_a.id = table_b.id") full_join_sql_result.show()
结果说明
- id为1、2、3的行在两个DataFrame中都存在,所以
name和Movie列均有对应值 - id为4的行仅存在于DataFrame
a中,因此Movie列显示null - id为5的行仅存在于DataFrame
b中,因此name列显示null
内容的提问来源于stack exchange,提问作者User12345
相关产品推荐
相关产品推荐

