在PySpark Dataframe中合并列中的重复行

w80xi6nr  于 2022-12-03  发布在  Spark
关注(0)|答案(2)|浏览(220)

我在一个PySpark数据框中有重复的行,我想根据一列中的重复条目将所有这些行合并到一行中。

当前表

Deal_ID Title   Customer    In_Progress Deal_Total
30      Deal 1  Client A    350         900
30      Deal 1  Client A    360         850
50      Deal 2  Client B    30          50
30      Deal 1  Client A    125         200
30      Deal 1  Client A    90          100
10      Deal 3  Client C    32          121

尝试的PySpark代码

F.when(F.count(F.col('Deal_ID')) > 1, F.sum(F.col('In_Progress')) && F.sum(F.col('Deal_Total'))))
.otherwise(),

需要表

Deal_ID Title   Customer    In_Progress Deal_Total
30      Deal 1  Client A    925         2050
50      Deal 2  Client B    30          50
10      Deal 3  Client C    32          121
qgelzfjb

qgelzfjb1#

我认为您需要按具有重复行的列进行分组,然后汇总金额。我认为这解决了您的问题:

df = df.groupBy(['Deal_ID', 'Title', 'Customer']).agg({'In_Progress': 'sum', ' Deal_Total': 'sum'})
5vf7fwbs

5vf7fwbs2#

  • 您有一个SQL标记,因此这就是它在其中的工作方式
select 

deal_id,
title,
customer,
sum(in_progress) as in_progress,
sum(deal_total) as deal_total
from <table_name>
group by 1,2,3

否则,您可以在python pandas / dataframe中使用相同的group by函数,并将其应用于您的datadrame:

  • 您必须将需要作为聚合依据的列作为列表传递
  • 则需要指定聚合类型和要添加的列
df = df.groupBy(['deal_id', 'title', 'Customer']).agg({'in_progress': 'sum', ' deal_total': 'sum'})

相关问题