apache-spark - Apache Spark 分区分布策略
问题描述
Apache Spark 中有分区策略。哈希分区、范围分区和编写自定义分区器的能力。但是分区是如何按集群节点分布的呢?有没有办法以某种方式影响这一点?
解决方案
Spark 中的分区分布依赖于数据源和您的配置。您引用的分区器在手动重新分区操作期间使用,例如coalesce或repartition。当您决定这样做时,Spark 有时会在节点之间打乱数据(如果 shuffle flat 设置为 true)。分区器也用于一些基于 RDD 的操作,例如RDD.sortByKey看起来像:
def sortByKey(ascending: Boolean = true, numPartitions: Int = self.partitions.length): RDD[(K, V)] = self.withScope
{
val part = new RangePartitioner(numPartitions, self, ascending)
new ShuffledRDD[K, V, V](self, part).setKeyOrdering(if (ascending) ordering else ordering.reverse)
}
关于数据读取时的分区,取决于源类型。对于 Kafka,它将是一个主题的分区,对于 HDFS 是一个文件拆分,对于一个 RDBMS 源,一个数字列和 AFAIK,这里不涉及分区器。前段时间我写了一些关于 Spark(和 Spark SQL)分区的文章。有兴趣的可以看看:
推荐阅读
- android - 在后台应用程序中处理通知消息
- apache-spark - PySpark:读取镶木地板时如何读取分区列
- project-reactor - 用千分尺测量 ElasticScheduler?
- python - 提高 pandas to_csv() 将大数据写入磁盘的速度
- authentication - 授权请求标头与凭据的 POST 请求正文
- sockets - 如何在基于异步模式的 boost::asio 中接收未知大小的缓冲区
- python - 尝试使用列表理解将列表中的每个数字相乘但不起作用
- excel - 在excel中查找和更改值
- autohotkey - Excel Com 对象使用 AutoHotKey 随机不可见
- python - Can't import cross_validation from sklearn in version > 0.20