这可能是一个简单的问题。
但是我自己并没有走太远。
我正在尝试在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)
答案 0 :(得分:1)
我可以单独列出所有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 :(得分:-1)
逻辑:
1。)我们首先将ta数据框中的player_name重命名为player,以便我们可以加入
2。)一旦columnNames相同,我们就可以使用方括号[]
3。)我们还从数据帧ta中动态选择列
代码:
ta = ta.withColumn("player_name","player")
inner_join = ta.join(tb,["player"]).select(col(x) for x in ta.columns])