PySpark相当于简单的SQL连接

时间:2019-01-31 00:11:18

标签: apache-spark pyspark pyspark-sql databricks azure-databricks

这可能是一个简单的问题。

但是我自己并没有走太远。

我正在尝试在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)

2 个答案:

答案 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])