自我加入pyspark中的不同列?

Self join on different columns in pyspark?

我有这样的 pyspark 数据框

df = sqlContext.createDataFrame([
    Row(a=1, b=3),
    Row(a=3, b=2),
])

+---+---+
|  a|  b|
+---+---+
|  1|  3|
|  3|  2|
+---+---+

我试过这样自己加入

df1 = df.alias("df1")
df2 = df.alias("df2")

cond = [df1.a == df2.b]
df1.join(df2, cond).show()

但它给我错误。

理想情况下,我想找到一个邻居共同的所有对。 (3 对 1,2 都是通用的)

+---+---+
| c1| c2|
+---+---+
|  1|  2|
+---+---+

您可以在自连接之前相应地重命名列名。

from pyspark.sql.functions import *

df_as1 = df.alias("df_as1").selectExpr("a as c1", "b")
df_as2 = df.alias("df_as2").selectExpr("a", "b as c2")
joined_df = df_as1.join(df_as2, col("df_as1.b") == col("df_as2.a"), 'inner').select("c1", "c2")

joined_df.show()

输出将是:

+---+---+
| c1| c2|
+---+---+
|  1|  2|
+---+---+