【问题标题】:Perform dataframe join before another one在另一个数据帧之前执行数据帧连接
【发布时间】:2022-12-07 03:24:12
【问题描述】:

在 3 个表之间执行数据帧 join 的好方法是什么? 我还需要在我的数据框中有重复的列。

   SELECT
      tbl_1.id,
      tbl_2.id,
      tbl_3.id 
    FROM tbl_1
    JOIN tbl_2
      ON tbl_1.id = tbl_2.id 
    JOIN tbl_3
      ON tbl_3.id = tbl_2.id ;

【问题讨论】:

    标签: python pyspark


    【解决方案1】:

    第一件事:如果你想在输出 DataFrame 中包含所有重复的列,你应该在它们前面加上一些前缀,这样它们就可以以某种方式区分。例子:

    df = spark.createDataFrame([(1, 2), (1, 1)], "id: int, val: int")
    df.show()
    +---+---+
    | id|val|
    +---+---+
    |  1|  2|
    |  1|  1|
    +---+---+
    
    from pyspark.sql.functions import col
    
    df.select([col(c).alias("df1_" + c) for c in df.columns]).show()
    +------+-------+
    |df1_id|df1_val|
    +------+-------+
    |     1|      2|
    |     1|      1|
    +------+-------+
    

    第二件事:如果 SQL 语法由于任何原因不可用,那么您将不得不一个接一个地连接 DataFrame - join 方法仅将一个 DataFrame 作为连接的右侧,因此您可以将它们链接起来。片段:

    df1 = spark.createDataFrame([(1, 1), (1, 4)], "df1_id: int, df1_val: int")
    df2 = spark.createDataFrame([(1, 2), (1, 5)], "df2_id: int, df2_val: int")
    df3 = spark.createDataFrame([(1, 3), (1, 6)], "df3_id: int, df3_val: int")
    
    df1.join(df2, df1.df1_id == df2.df2_id, "inner").join(df3, df1.df1_id == df3.df3_id, "inner").show()
    +------+-------+------+-------+------+-------+
    |df1_id|df1_val|df2_id|df2_val|df3_id|df3_val|
    +------+-------+------+-------+------+-------+
    |     1|      4|     1|      5|     1|      3|
    |     1|      4|     1|      2|     1|      3|
    |     1|      1|     1|      5|     1|      3|
    |     1|      1|     1|      2|     1|      3|
    |     1|      4|     1|      5|     1|      6|
    |     1|      4|     1|      2|     1|      6|
    |     1|      1|     1|      5|     1|      6|
    |     1|      1|     1|      2|     1|      6|
    +------+-------+------+-------+------+-------+
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-12
      • 2019-10-28
      • 2018-03-30
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      相关资源
      最近更新 更多