pyspark只与第一条记录左连接

5lwkijsr  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(547)

我有2个pysaprkDataframe。
我正在寻找加入df1与df2的选项。只与df2的第一行左连接。
df1型:

ID  string
1   sfafsda
2   trwe
3   gfdgsd

df2型

ID  address   state
1   Montreal  Quebec
1   Quebec    Quebec
2   Trichy    TN
2   Madurai   TN
3   Bangalore KN
3   Mysore    KN
3   Hosur     KN

联接的预期输出:

ID  string   address   state
1   sfafsda  Montreal  Quebec
2   trwe     Trichy    TN
3   gfdgsd   Bangalore KN

当我在使用databricks时,请告诉我是否只使用第一行实现pyspark left join更容易,或者是否可以使用sql join实现预期的输出。谢谢。

ipakzgxi

ipakzgxi1#

是的,可以使用pyspark,但是您需要为其添加一个索引列 df2 . 请参见下面的代码:

df2 = df2.withColumn('index', F.monotonically_increasing_id())

df1.join(df2, 'ID', 'left') \
   .select('*', F.first(F.array('address', 'state')).over(Window.partitionBy('ID').orderBy('index')).alias('array')) \
   .select('ID', 'string', F.col('array')[0].alias('address'), F.col('array')[1].alias('state')) \
   .groupBy('ID', 'string') \
   .agg(F.first('address'), F.first('state')) \
   .orderBy('ID')

相关问题