📜  pyspark 随机抽样 - Python (1)

📅  最后修改于: 2023-12-03 15:33:55.808000             🧑  作者: Mango

pyspark 随机抽样 - Python

在数据处理过程中,随机抽样是一项常见的操作。在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,因为这将导致内存使用量过高。