我有 2 个 Spark 作业,一个是预处理,第二个是处理。 流程作业需要针对数据中的每个用户进行计算。 我想避免像groupBy这样的shuffle,所以我考虑将预处理的结果保存为Parquet中用户的bucket,或者由用户重新分区并保存结果。
更喜欢什么?以及为什么
最佳答案
可以减少在 partitionBy
和 bucketBy
之间的选择以确定数据基数:
- 低基数 -> 分区
- 高基数 -> 存储桶
但是两者都不用于聚合。用于谓词下推,仅此而已。因此,当您的目标是避免像 groupBy 这样的随机播放时,它们不会有太大用处,尽管将来可能会随着新 API 的变化而改变。
关于apache-spark - 偏好、存储桶或重新分区是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47036486/