按条件将Pyspark DataFrame与sql一样加入sql

时间:2019-07-25 10:15:30

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

如何像条件分区一样在sql上加入两个Pyspark DataFrame? 我实际上需要连接两个数据帧,以便对于每个组(基于列变量),我都与其他表进行外部连接。

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

df1:

enter image description here

df2:

enter image description here

所需的输出类似于:

enter image description here

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我更愿意说,根据您的输出期望,存在任何一种缺少连接的逻辑。

但是,请查看与您的期望密切相关的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|
+-------+-----+---------+-----+---------+-----+