大数据之spark数据分区

大数据之spark数据分区

1. 为什么要分区

  • spark可以通过分区来减少网络通信开销
  • 分区并非对于所有场景都是有好处的
若给定RDD只被扫描一遍,那么完全没必要做分区,只有当数据多次在诸如链接这种基于键的操作
时,分区才会有帮助。

2. 举例说明:

假设我们有一份不变的大文件userData,以及每5分钟产生的小数据events,现要求:每5分钟产
出events数据 ,userData对events做一次join操作

默认情况:

  • join操作会求两个RDD中的所有键的哈希值
  • 将哈希值相同的记录通过网络传到同一台机器上
  • 然后在那台机器上对所有键相同的记录进行连接
  • 存在问题:
    每次调用时,都要对userData进行哈希值计算和跨节点数据混洗(shuffle),浪费资源和时间
  • 解决方案:
    对userData进行分区和持久化
    由于对userData构造时指定了分区和持久化,调用join时,便不会重新对userData进行数据混洗了,只对events做shuffle, 将events中特定key对应的记录发送到userData的对应分区所在的机器上, 这样便大大减少了需要做网络通信的数据, 加快了程序运行时间。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值