apache-spark - 如何确定 Spark 中的存储桶数量
问题描述
我已经阅读了很多关于 Spark 分桶的文章,但仍然无法清楚地了解它。但是到目前为止我所理解的是“Bucketing就像分区内的分区,它用于具有非常高基数的候选人,这有助于避免重新洗牌操作”。
即使在 Spark 文档中,也找不到足够的解释。粘贴文档中的示例
peopleDF.write.bucketBy(42, "name").sortBy("age").saveAsTable("people_bucketed")
在这里无法理解,数字“42”是如何决定分桶的。请帮助理解相同。此外,任何关于分桶的更清晰的解释也会很棒。
解决方案
42 人生的意义是什么?因此,一个例子。
Spark Bucketing 对 Spark 中的 ETL 很方便,其中 Spark Job A 根据 Bucketing def 写出 t1 的数据,Spark Job B 同样写出 t2 的数据,Spark Job C 使用 Bucketing 定义连接 t1 和 t2,避免了 shuffle 即交换。优化。
没有通用公式。这取决于卷、可用的执行者等。主要的一点是避免洗牌。作为指导,JOINing 和 AGGr 的默认值设置为 200,因此 200 或更大可能是一种方法,但是您的集群上有多少资源?
但是为了满足您对知识的追求,人们可能会争辩说,42 应该设置为您分配给 Spark 作业/应用程序的执行器数量(= 1 个核心),撇开偏度问题不谈。
推荐阅读
- teamcity - 从 TeamCity 构建步骤开始后台进程
- python - 如何将列表转换为字典 python;字典的键可能有多个值吗?
- ios - 更新到 ARC Obj-c 后声音不播放
- python - Python中的对象分配意外行为
- android - 为什么我的套接字客户端收到多个广播消息?
- python - 如何在 TensorFlow 中使用 Hugging Face Transformers 库对自定义数据进行文本分类?
- python - 如何检查从 doc.table 中提取的空 document.paragraph 值?
- c# - 拆分逗号以将多行插入数据库 (ASP.NET MVC)
- python - 返回相同的单词重复两次,然后是新的双倍单词的长度
- java - 如何在没有循环且仅使用 foldLeft 的情况下获得 minPos?