假设我有一个 DataSet
看起来是这样的:
Name | Grade
---------------
Josh | 94
Josh | 87
Amanda | 96
Karen | 78
Amanda | 90
Josh | 88
我想创建一个新的 DataSet
其中,每个名称有3行,其他行(如果有的话)是从相同名称的行中取样的(例如,karen将有3行相同的行)。
我如何做到这一点而不循环通过每个名字?
假设我有一个 DataSet
看起来是这样的:
Name | Grade
---------------
Josh | 94
Josh | 87
Amanda | 96
Karen | 78
Amanda | 90
Josh | 88
我想创建一个新的 DataSet
其中,每个名称有3行,其他行(如果有的话)是从相同名称的行中取样的(例如,karen将有3行相同的行)。
我如何做到这一点而不循环通过每个名字?
1条答案
按热度按时间sauutmhj1#
数据准备:
仅当您的数据
skewed
为了一个Name
:添加一个随机数,并为每个随机数筛选前3个随机数Name
.现在,为每个
Name
重复3次,确保每个人至少有3条记录Name
. 最后取前3个值explode
```df4.groupBy("Name").agg(collect_list("Grade") as "grade_list")
.withColumn("temp_list", slice( flatten(array_repeat($"grade_list", 3)), 1,3))
.select($"Name",explode($"temp_list") as "Grade").show