【问题标题】:Join Pyspark DataFrame with sql like partition by condition将 Pyspark DataFrame 与 sql 类似按条件分区
【发布时间】:2019-07-26 03:14:06
【问题描述】:

如何在 sql 上按条件连接两个 Pyspark DataFrame? 我实际上需要连接两个数据框,以便对于每个组(基于列变量),我与其他表进行外部连接。

例如,我有以下两个数据框:

df1:

df2:

所需的输出类似于:

我曾尝试使用 Pyspark 的 Window 运算符,但不能,因为它不能用于通过窗口连接。

任何帮助将不胜感激。

【问题讨论】:

    标签: dataframe apache-spark-sql pyspark-sql


    【解决方案1】:

    我更愿意说,根据您的输出期望,任何类型的连接都缺少逻辑。

    不过,看看cross join,,它可能与您的期望密切相关。

    >>> df_1.crossJoin(df_2).withColumn("match",  when((df_1.batch==df_2.batch) & (df_1.subject==df_2.subject) , "Yes").otherwise("No")).show()
    +-------+-----+---------+-----+---------+-----+
    |exam_id|batch|  subject|batch|  subject|match|
    +-------+-----+---------+-----+---------+-----+
    |      1|   X1|    maths|   X1|    maths|  Yes|
    |      1|   X1|    maths|   X1|  english|   No|
    |      1|   X1|    maths|   X1|chemistry|   No|
    |      1|   X1|  english|   X1|    maths|   No|
    |      1|   X1|  english|   X1|  english|  Yes|
    |      1|   X1|  english|   X1|chemistry|   No|
    |      2|   X1|chemistry|   X1|    maths|   No|
    |      2|   X1|chemistry|   X1|  english|   No|
    |      2|   X1|chemistry|   X1|chemistry|  Yes|
    +-------+-----+---------+-----+---------+-----+
    

    【讨论】:

    • 感谢您的回答,但预期输出不同。实际上,对于每个唯一的考试 ID,都需要一个外连接。在这里,exam_id 1 的最终输出中,我们有 6 行,但实际上,预计只有 3 行(df2 中的行数)。有什么建议吗?
    猜你喜欢
    • 2019-01-16
    • 2016-06-22
    • 1970-01-01
    • 2017-01-15
    • 2016-02-23
    • 2016-03-06
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多