Spark中Transformation有个distinct([numTasks])算子
用于返回一个在源数据集去重之后的新数据集,即去重。
可一直没弄明白官方文档上提到的distinct方法中参数[numTasks]的具体含义,于是做了一下测试:
依次对numTasks值增大测试:
numTasks=1
numTasks=2
numTasks=3
numTasks=5
numTasks=10
numTasks=101
通过对比可以发现,这个numTasks并不跟分区有关系,而可以理解为一个数学概念中的“因子”。如果设置的numTasks能被数据集中元素整除,那么排序就按先无序的排因子,后无序排非因子的组合(即相当于局部无序);如果设置的numTasks不能被数据集中所有元素整除,那么排序会按照去重之前RDD排序的顺序返回。
从这个numTasks=10中和numTasks=5中仔细观察可以确定这个“任务数”是将任务均分了,如5个任务数,那么一个任务集中元素个数为20个,从数据集中选择能被5整除的20个元素作为第一个数据集的结果,再选择能被5除之后余数为1的作为第二个数据集...以此类推,局部无序,而整体有序。
https://blog.youkuaiyun.com/fortuna_i/article/details/81506936