mysql 如何使用pyspark从一个框架中过滤一定比例的数据

jw5wzhpr  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(43)

我有一个表,其中我有一个列组。

Groups
   --------
  |GroupA  |
  |GroupB  |
  |GroupC  |
  |GroupA  |
  |GroupB  |
   --------

字符串
假设我有2000条GroupA记录,1000条GroupB记录和1000条GroupC记录。此外,这些值每天都会变化。我如何使用SQL或pyspark从中提取5%的数据。我主要是在pyspark中寻找一些东西。

juud5qan

juud5qan1#

**场景1:**如果您希望从整个数据集中抽取5%的样本。

from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .master("local[1]") \
    .appName("SparkByExamples.com") \
    .getOrCreate()

df=spark.range(100)
print(df.sample(0.05).collect())

字符串
0.05占数据的5%。

场景2:如果你想要每个组的5%:

def sample_n_per_group(n, *args, **kwargs):
    def sample_per_group(pdf):
        return pdf.sample(n, *args, **kwargs)
    return sample_per_group

df = spark.createDataFrame(
    [
        (1, 1.0), 
        (1, 2.0), 
        (2, 3.0), 
        (2, 5.0), 
        (2, 10.0)
    ],
    ("id", "v")
)

(df.groupBy("id")
   .applyInPandas(
        sample_n_per_group(2, random_state=2), 
        schema=df.schema
   )
)


参考号:Choosing random items from a Spark GroupedData Object

相关问题