📅  最后修改于: 2023-12-03 15:33:55.808000             🧑  作者: Mango
在数据处理过程中,随机抽样是一项常见的操作。在PySpark中,可以使用sample()
函数轻松完成数据集的随机抽样操作。
sample(withReplacement, fraction, seed=None)
sample()
函数有三个参数:
withReplacement
:是否使用重复抽样。如果为True,则抽样集合中可能会存在重复元素。如果为False,则抽样集合中的所有元素都是唯一的。默认为True。fraction
:抽样后返回的结果集合中所包含数据占原数据集合总数的比例。取值范围为[0,1]。例如,如果设置fraction为0.5,则抽样结果中包含原数据集合总数的50%。默认值为1.0。seed
:用于随机生成器的种子。如果不设置,则使用默认的随机生成器。默认为None。在这个示例中,我们将使用PySpark随机抽样来对一个包含姓名和年龄数据的数据集进行抽样。 数据集的源代码如下所示:
# 创建DataFrame对象
from pyspark.sql.types import *
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("pyspark_sample").getOrCreate()
schema = StructType([
StructField("name", StringType()),
StructField("age", IntegerType())
])
data = [("Alice", 25), ("Bob", 30), ("Charlie", 35), ("David", 40), ("Eva", 45), ("Frank", 50)]
df = spark.createDataFrame(data=data, schema=schema)
df.show()
输出如下:
+-------+---+
| name|age|
+-------+---+
| Alice| 25|
| Bob| 30|
|Charlie| 35|
| David| 40|
| Eva| 45|
| Frank| 50|
+-------+---+
现在,我们要从这个数据集中抽取50%的数据,方法如下:
# 随机抽样,并将其结果转换为Pandas DataFrame对象
sampled_df = df.sample(withReplacement=False, fraction=0.5, seed=None).toPandas()
sampled_df
输出如下:
name age
0 Alice 25
1 David 40
2 Charlie 35
在这个示例中,我们使用了sample()
函数对数据集进行了随机抽样,结果仅返回了3行数据。请注意,我们还将抽样结果转换为Pandas DataFrame对象,并使用toPandas()
方法来返回结果。这是因为在这个例子中,抽样结果非常少,因此不会对性能造成任何影响。但是,如果你需要处理大量数据,请不要将结果集转换为Pandas,因为这将导致内存使用量过高。