python spark RDD randomSplit 参数解释与使用详解

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()

这里写图片描述

接下来测试一下randomsplit方法
这里写图片描述

>>> 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 : )

猜你喜欢

转载自blog.csdn.net/dangsh_/article/details/80193051