我使用pyspark 3.0.1。我有一个学生数据帧df
。数据框看起来像
MathsMarks HistoryMarks id class TotalMarks
80 75 1 9 300
90 78 1 9 350
65 70 7 8 250
58 55 7 8 200
75 72 7 8 260
85 82 9 9 400
82 85 15 8 410
我需要从数据中随机选择一条记录,如果id
&class
组合重复一次以上。例如,我的结果可能看起来像
MathsMarks HistoryMarks id class TotalMarks
80 75 1 9 300
58 55 7 8 200
85 82 9 9 400
82 85 15 8 410
你能建议我怎么做吗?在实现@mck的步骤后,我得到重复,而他们不是连续的行。例如
Group MathsMarks HistoryMarks id class TotalMarks
A 80 75 1 9 300
A 90 78 1 null 350
A 70 78 1 9 320
B 65 70 7 8 250
B 58 55 8 null 240
B 65 70 7 8 250
B 58 55 8 null 200
C 85 82 9 9 400
D 82 85 15 8 410
Group MathsMarks HistoryMarks id class TotalMarks
A 80 75 1 9 300
A 90 78 1 null 350
B 65 70 7 8 250
B 58 55 8 null 240
C 85 82 9 9 400
D 82 85 15 8 410
您可以使用row_number()
:
from pyspark.sql import functions as F, Window
df1 = df.withColumn(
"rn",
F.row_number().over(Window.partitionBy("id", "class").orderBy(F.lit(None)))
).filter("rn = 1").drop("rn")
df1.show()
#+----------+------------+---+-----+----------+
#|MathsMarks|HistoryMarks| id|class|TotalMarks|
#+----------+------------+---+-----+----------+
#| 65| 70| 7| 8| 250|
#| 82| 85| 15| 8| 410|
#| 85| 82| 9| 9| 400|
#| 80| 75| 1| 9| 300|
#+----------+------------+---+-----+----------+
一个简单的dropDuplicates
就可以了:
df.dropDuplicates(['id', 'class']).show()
+----------+------------+---+-----+----------+
|MathsMarks|HistoryMarks| id|class|TotalMarks|
+----------+------------+---+-----+----------+
| 82| 85| 15| 8| 410|
| 85| 82| 9| 9| 400|
| 80| 75| 1| 9| 300|
| 65| 70| 7| 8| 250|
+----------+------------+---+-----+----------+