我有10个具有相同模式的文件:
用户标识、时间戳、事件类型、描述、其他列
它们存储在10个文件中,因为它们来自10个不同的来源。要做一些分析,我需要将同一个用户的数据(记录)组合在一起,并产生一些值(计算逻辑相当复杂,reducebykey无法完成)。所以我在spark中使用groupbykey()。这是非常耗时的洗牌。有什么办法让这更快吗?在此阶段,计算将完全在具有相同用户id的记录中进行。顺便说一句,我可以和数据提供商谈谈,让他们准备特定格式的数据。
我有10个具有相同模式的文件:
用户标识、时间戳、事件类型、描述、其他列
它们存储在10个文件中,因为它们来自10个不同的来源。要做一些分析,我需要将同一个用户的数据(记录)组合在一起,并产生一些值(计算逻辑相当复杂,reducebykey无法完成)。所以我在spark中使用groupbykey()。这是非常耗时的洗牌。有什么办法让这更快吗?在此阶段,计算将完全在具有相同用户id的记录中进行。顺便说一句,我可以和数据提供商谈谈,让他们准备特定格式的数据。
1条答案
按热度按时间nnvyjq4y1#
我认为在将文件读入rdd时,可以在分区中使用相同的用户id创建相同的记录。例如,假设您想为rdd创建20个分区,您可以在记录中获取用户id的hashcode,并使用
hashcode % 20
将此记录分配给其中一个分区。它可以确保具有相同用户id的记录进入相同的分区。