自我加入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|
+---+---+
我有这样的 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|
+---+---+