当前位置: 首页 > 知识库问答 >
问题:

pyspark仅在第一条记录时左连接

公良安邦
2023-03-14

我有2个pysaprk数据帧。

我正在寻找将df1与df2连接的选项。左连接仅与df2的第一行连接。

DF1:

ID  string
1   sfafsda
2   trwe
3   gfdgsd

大黑手

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

当我正在处理数据砖时,请让我知道仅使用第一行实现 pyspark 左连接是否更容易,或者 sql 连接是否可以实现预期的输出。谢谢。

共有1个答案

张财
2023-03-14

是的,可以使用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')
 类似资料:
  • 问题内容: 我读了许多关于仅获得左联接的第一行的主题,但是由于某种原因,这对我不起作用。 这是我的结构(当然是简化的) 提要 艺人 feeds_artists 现在,我想获取文章并仅加入第一位艺术家,我想到了这样的事情: 只是仅获取feeds_artists的第一行,但已经行不通了。 由于数据库原因,我无法使用,也无法按结果对结果进行分组(因为我需要按日期对它们进行排序(我通过这种方式对结果进行分

  • 我读过很多关于只获得左联接的第一行的文章,但是,由于某些原因,这对我不起作用。 这里是我的结构(当然是简化的) 源 只获得feeds_artists的第一行,但这已经不起作用了。 由于数据库的原因,我不能使用并且我不能按对结果进行分组,因为我需要按日期对它们进行排序(我通过这样分组得到了结果,但结果不是最新的) 也尝试了一些外用的东西--也没有成功。老实说,我真的想象不出这些排是怎么回事--这可能

  • 我正在使用Ingres 11.0 DB,不确定它是否在其他数据库引擎上具有相同的行为,但这里是它 它不会返回表1中的所有记录,但我使用的是左连接,它应该从T1返回aa记录,从t2只处理行,只返回1条记录 如果我将其中一个条件从where子句移动到join条件,它的开始将返回我所期望的结果 问题是为什么它不工作在哪里所有搜索条件在哪里子句,但工作时,我移动t2.id_number从哪里加入条件? 我

  • 问题内容: 我有一个包含ID,WorkerID,IsActive标志(1或0)和LocalTime的表。每次工作人员处于活动状态或不活动状态时,都会使用WorkerID,1或0标志记录以及一个时间(LocalTime)创建一条记录。 我想插入一个新表中:从该表中,对于每个唯一的WorkerID,仅当该记录的IsActive标志为1时,才为该唯一的WorkerID选择具有最新LocalTime的记录

  • 问题内容: 在多表查询中,每条记录只能获得一行? 我有这三个表: 苹果 疲劳风险管理系统 FARM_APPLES 使用此表,我需要以下结果: 非常感谢您的任何帮助,在此先感谢您。 编辑 感谢OMG Ponies和Bill,我将尽力尝试您的两种解决方案,这是最后一件事,它有可能获得以下结果: 问题答案: Firebird 2.0支持CASE表达式,因此您可以使用:

  • 问题内容: 如标题所示,我想选择以分组的每组行的第一行和最后一行。 我在此表中包含以下数据: 我需要获取的是列开头的第一个值和列末尾的最后一个值,并按group by group列进行分组。 结果表应如下所示: 我使用和和进行了查询。它可以在SQL Server 2012中使用,但不能在SQL Server 2008中使用。我需要一个可以在SQL Server 2008中执行的查询。 问题答案: