Spark bucketing bucket分桶原理和应用

3 篇文章 0 订阅

介绍Spark分桶的原理以及如何在数据分析和数据准备中更好的应用分桶。

分桶概念

spark的bucketing分桶是一种组织存储系统中数据的方式。以便后续查询中用到这种机制,来提升计算效率。

如果分桶设计得比较合理,可以避免关联和聚合查询中的混洗(洗牌、打散、重分布)的操作,从而提升性计算性能。

一些查询(sort-merge join、shuffle-hash join、聚合、开窗函数)都需要输入数据按照关联键或聚合键被重分布。更具体地说,具有相同键值的行要被重分布到同一分区。为了满足这个要求,spark需要对数据进行重分布,物理上就是说spark要把数据从一个executor移动到另一个executor,这也就是常说的shuffle。

有了bucketing,我们相当于提前进行了shuffle,并把重分布的结果保存到了存储系统。当我们从存储系统读回这些分桶后的数据时,spark将会感知到这些分布并不会再次执行重分布。也就是常说的,空间换时间。

分桶代码

df.write
  .mode(saving_mode)  # append/overwrite
  .bucketBy(n, field1, field2, ...)
  .sortBy(field1, field2, ...)
  .option("path", output_path)
  .saveAsTable(table_name)

注意点:

1、必须以saveAsTable的方式保存为表。因为分区信息需要保存到元数据中。spark在访问表时会得到关于这个表的分桶信息。

2、sortBy是个可选操作。分桶在没有排序下也可以工作。

3、bucketBy第一个参数是桶的个数。设置桶数量是个挑战,需要考虑数据集整体

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只要开始永远不晚

谢谢打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值