randomSplit(weigh , *seed):
1. weights: 是一个数组
根据weight(权重值)将一个RDD划分成多个RDD,权重越高划分得到的元素较多的几率就越大。数组的长度即为划分成RDD的数量,如
rdd1 = rdd.randomSplit([0.25,0.25,0.25,0.25])
作用是把原本的RDD尽可能的划分成4个相同大小的RDD
需要注意的是weight数组内数据的加和应为1
2. seed: 是可选参数 ,作为random的种子
根据种子构造出一个Random类。
seed 是种子的意思,因为在电脑中实际上是无法产生真正的随机数的,
都是根据给定的种子(通常是当前时间、上几次运算的结果等),通过一个固定的计算公式来得到 下一个随机数
seed就是要求使用固定的种子来开始生成随机数。在给定相同的种子下,生成的随机数序列总是相同的
返回一个rdd数组
首先打开pyspark
创建一个rdd,内容是数字0-19构成的list
>>> rdd = sc.parallelize(range(20))
>>> rdd.collect()
>>> rdd1 = rdd.randomSplit([0.25,0.25,0.25,0.25])
>>> rdd1[0].collect()
[3, 4, 9, 10, 15]
>>> rdd1[1].collect()
[2, 8]
>>> rdd1[2].collect()
[0, 6, 7, 12, 13, 14, 16, 17, 19]
>>> rdd1[3].collect()
[1, 5, 11, 18]
可以看到将rdd1按照权重分为了4个RDD
接下来看seed的作用
两次的seed都设置为1,发现分割的结果完全相同
>>> rdd1 = rdd.randomSplit([0.5,0.5],1)
>>> rdd1[0].collect()
[6, 7, 8, 9, 10, 11, 14, 15, 17, 18]
>>> rdd1[1].collect()
[0, 1, 2, 3, 4, 5, 12, 13, 16, 19]
>>> rdd2 = rdd.randomSplit([0.5,0.5],1)
>>> rdd2[0].collect()
[6, 7, 8, 9, 10, 11, 14, 15, 17, 18]
>>> rdd2[1].collect()
[0, 1, 2, 3, 4, 5, 12, 13, 16, 19]
将seed设置为2,结果就不同了
>>> rdd3 = rdd.randomSplit([0.5,0.5],2)
>>> rdd3[0].collect()
[4, 5, 8, 9, 10, 11, 12, 13, 17, 18]
>>> rdd3[1].collect()
[0, 1, 2, 3, 6, 7, 14, 15, 16, 19]
over : )