赞
踩
df.repartition(10, Seq("col_name1", "col_name2"))
指定字段进行Hash & 取模,将数据分发到不同分区。
df.repartition(10)
遍历数据,依次分发到不同分区。
Spark引入RangePartitioner的目的是为了解决HashPartitioner所带来的分区倾斜问题,也即分区中包含的数据量不均衡问题。HashPartitioner采用哈希的方式将同一类型的Key分配到同一个Partition中,因此当某一或某几种类型数据量较多时,就会造成若干Partition中包含的数据过大问题,而在Job执行过程中,一个Partition对应一个Task,此时就会使得某几个Task运行过慢。RangePartitioner基于抽样的思想来对数据进行分区。图4简单描述了RangePartitioner的数据分区过程。
df.repartitionByRange(10)
通过水塘抽样算法进行数据采样,对采样数据尽量等分进行分区。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。