PySpark 相当于一个简单的 SQL 连接
PySpark equivalent of a simple SQL join
这可能是一个非常简单的问题。
但我一个人走不了多远。
我正在尝试在 Databricks 中使用 PySpark 来执行 SQL 相当于查找的操作:
select
a.*
, b.MASTER_ID as PLAYER_ID
from vGame a
join PLAYER_XREF b
on a.PLAYER_NAME = b.PLAYER
请注意 on
两侧的两个属性的名称不同。
你能告诉我它的 pyspark 版本吗?
在我看来,与此相比,这里的许多切线帖子都过于复杂。
我找到了这个,这非常接近,但返回的数据框是 ta 和 tb 的所有列。
inner_join = ta.join(tb, ta.name == tb.name)
我可以单独列出所有 ta
列,并将 tb
列的别名设置为:
from pyspark.sql.functions import *
inner_join = ta.join(tb, ta.PLAYER_NAME == tb.PLAYER).select('<taCol1>', '<taCol2>', ... col('MASTER_ID').alias('PLAYER_ID'))
display(inner_join)
逻辑:
1.) 我们首先将ta dataframe中的player_name重命名为player,这样我们就可以加入
2.) 一旦列名相同,我们就可以使用方括号 []
进行连接
3.) 我们还从数据框 ta
中动态地 select 列
代码:
ta = ta.withColumn("player_name","player")
inner_join = ta.join(tb,["player"]).select(col(x) for x in ta.columns])
这可能是一个非常简单的问题。
但我一个人走不了多远。
我正在尝试在 Databricks 中使用 PySpark 来执行 SQL 相当于查找的操作:
select
a.*
, b.MASTER_ID as PLAYER_ID
from vGame a
join PLAYER_XREF b
on a.PLAYER_NAME = b.PLAYER
请注意 on
两侧的两个属性的名称不同。
你能告诉我它的 pyspark 版本吗? 在我看来,与此相比,这里的许多切线帖子都过于复杂。
我找到了这个,这非常接近,但返回的数据框是 ta 和 tb 的所有列。
inner_join = ta.join(tb, ta.name == tb.name)
我可以单独列出所有 ta
列,并将 tb
列的别名设置为:
from pyspark.sql.functions import *
inner_join = ta.join(tb, ta.PLAYER_NAME == tb.PLAYER).select('<taCol1>', '<taCol2>', ... col('MASTER_ID').alias('PLAYER_ID'))
display(inner_join)
逻辑:
1.) 我们首先将ta dataframe中的player_name重命名为player,这样我们就可以加入
2.) 一旦列名相同,我们就可以使用方括号 []
进行连接3.) 我们还从数据框 ta
中动态地 select 列代码:
ta = ta.withColumn("player_name","player")
inner_join = ta.join(tb,["player"]).select(col(x) for x in ta.columns])