【问题标题】:PySpark equivalent of a simple SQL joinPySpark 相当于一个简单的 SQL 连接
【发布时间】:2019-01-31 00:11:17
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

      逻辑:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        相关资源
        最近更新 更多