pyspark仅保留一种类型组

s2j5cfk0  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(163)

假设我想检查同一组上的非重复名称计数,并且只想在该组中保留一个名称。

df.groupBy('job','age','gender').agg(countDistinct('name')).filter('count(DISTINCT name)>1').show()

| 工作|年龄|性别|计数(不同名称)|
| - -|- -|- -|- -|
| 工程师|二十二个|米|三个|
然后我想去这个组,只保留其中的一个名字.比方说当我们去这个组的时候,我们有这样的东西:
| 工作|年龄|性别|姓名|刻痕|
| - -|- -|- -|- -|- -|
| 工程师|二十二个|米|若翰|10个|
| 工程师|二十二个|米|狮子座|十五个|
| 工程师|二十二个|米|狮子座|十六岁|
| 工程师|二十二个|米|麦克|十七岁|
| 工程师|二十二个|米|麦克|十九个|
然后,我想只保留Mike(将John和Leo放到该组中),因此我希望该组是这样的
| 工作|年龄|性别|姓名|刻痕|
| - -|- -|- -|- -|- -|
| 工程师|二十二个|米|麦克|十七岁|
| 工程师|二十二个|米|麦克|十九个|
如何在pyspark中使用函数来实现这个?这样我就可以在不同的df中应用这个函数了?谢谢

py49o6xq

py49o6xq1#

可以使用rank窗口函数。

w = Window.partitionBy('job', 'age', 'gender').orderBy(desc('name'))
df = (df.withColumn('rnk', rank().over(w))
      .filter(col('rnk') == 1))

相关问题