【问题标题】:Join two dataframes using three seperate keys使用三个单独的键连接两个数据帧
【发布时间】:2021-11-17 13:28:22
【问题描述】:
import pyspark.sql.functions as F

data1 = [("10/05/21", 1, "White", 3000), ("10/06/21", 2, "Blue", 4100), ("10/07/21", 3, "Green", 6200)]
df1 = spark.createDataFrame(data1, ["START", "KEY1", "Color", "OTHER"])

data2 = [(1, 2, 3, 3000), (2, 3, 2, 4100), (3, 1, 2, 6200)]
df2 = spark.createDataFrame(data2, ["KEY2", "KEY3", "KEY4", "NUMBER"])

df_result = df1.withColumnRenamed("START", "DATE1").join(
    df2,
    F.col("KEY1") == F.col("KEY2")
).select("DATE1", "KEY3", "KEY4").join(
    df1.withColumnRenamed("START", "DATE2"),
    F.col("KEY1") == F.col("KEY3")
).select("DATE1", "DATE2", "KEY4").join(
    df1.withColumnRenamed("START", "DATE3"),
    F.col("KEY1") == F.col("KEY4")
).select("DATE1", "DATE2", "DATE3")

df_result.show()

我正在尝试使用找到 here 的方法,但似乎无法加入它,因为说无法解决 key4

【问题讨论】:

    标签: python-3.x dataframe pyspark


    【解决方案1】:

    您在第一次加入后没有选择KEY4,导致加入后select 不可用,条件为KEY1 = KEY3

    df_result = df1.withColumnRenamed("START", "DATE1").join(
        df2,
        F.col("KEY1") == F.col("KEY2")
    ).select("DATE1", "KEY3", "KEY4").join(
        df1.withColumnRenamed("START", "DATE2"),
        F.col("KEY1") == F.col("KEY3")
    ).select("DATE1", "DATE2", "KEY4").join(
        df1.withColumnRenamed("START", "DATE3"),
        F.col("KEY1") == F.col("KEY4")
    ).select("DATE1", "DATE2", "DATE3")
    

    输出

    +--------+--------+--------+
    |   DATE1|   DATE2|   DATE3|
    +--------+--------+--------+
    |10/05/21|10/06/21|10/07/21|
    |10/07/21|10/05/21|10/06/21|
    |10/06/21|10/07/21|10/06/21|
    +--------+--------+--------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 2016-09-16
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多