PySpark实战:takeSample操作

来自CloudWiki
跳转至: 导航搜索

介绍

takeSample操作时一个变换算子

它的作用是从RDD中抽样出固定大小的子数据集合,返回新的RDD。

第一个参数是一个布尔值,代表元素是否可以多次抽样;

第二个参数代表期望样本的大小

第三个参数seed代表随机数生成器的种子

代码


import findspark
findspark.init()
##############################################
from pyspark.sql import SparkSession
spark = SparkSession.builder \
        .master("local[1]") \
        .appName("RDD Demo") \
        .getOrCreate();
sc = spark.sparkContext
#############################################
rdd =sc.parallelize(range(2,10))
#[5, 9, 5, 3, 2, 2, 7, 7, 5, 7, 9, 9, 5, 3, 2, 4, 5, 5, 6, 8]
#True代表一个元素可以出现多次
print(rdd.takeSample(True, 20, 1))
#[5, 8, 3, 7, 9, 2, 6, 4]
#False代表一个元素只能出现1次
print(rdd.takeSample(False, 20, 1))
##############################################
sc.stop()

注意:由于takeSample操作会将RDD整个加载到driver端的内存中,因此takeSample操作应该应用在RDD数据不大的情况下。

输出

[5, 9, 5, 3, 2, 2, 7, 7, 5, 7, 9, 9, 5, 3, 2, 4, 5, 5, 6, 8]

[5, 8, 3, 7, 9, 2, 6, 4]