sparkDataframe上的重复过滤?

9fkzdhlc  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(341)

我有一个大的spark数据框,它包含各种财务信息,比如说模式看起来像:

Amount

account_id | amount
0            10.00
1            15.15
...

我有另一个大的sparkDataframe,它包含支付信息,应该表示对该金额的支付。例如

Payment

account_id | paid_amount
0            5.00
0            5.00
1            15.15

我想做的是遍历amount数据框中的每个惟一id,一次一个,过滤掉与该id关联的付款,以便执行其他一些计算。
这是一个缓慢的行动还是不明智的?似乎以线性方式循环遍历所有这些帐户ID会丢弃spark提供的许多优化。
如果有的话,还有什么更好的选择呢?
谢谢!

nhaq1z21

nhaq1z211#

下面是解决这个问题的方法。
使两个Dataframe尽可能小(例如,可能运行 payments_df.groupBy("account_id").sum() ,将它们写到磁盘上,看哪一个更小。
如果其中一个Dataframe小到可以广播,只需使用 big_df.join(broadcast(small_df), "id", "inner") . 有关广播连接的更多详细信息,请参见此处。
如果可以使用spark 3,请尝试连接,看看自适应查询执行是否能提供所需的性能。
如果这还不够好,可以考虑优化排序合并联接。
绝对不要一个接一个地迭代Dataframe中的行!

yiytaume

yiytaume2#

连接两个Dataframe并对它们执行复杂的操作

Df=Amountdf.join(paymentdf, 'id','inner')

相关问题