pyspark 如何根据第1列获得前5名

whhtz7ly  于 2022-11-01  发布在  Spark
关注(0)|答案(2)|浏览(148)
RDD = [('B000002KXA', 'Music', 'Rescue Me', 1), ('6302049040', 'Movies & TV', 'Pennies from Heaven [VHS]', 2), ('B000002OKC', 'Music', 'Country Music Hall of Fame', 1), ('6304174616', 'Movies & TV', 'Star Blazers Series 1: The Quest for Iscandar (6pc) (Coll) [VHS]', 1), ('630265288X', 'Movies & TV', 'The Kathy Kaehler Fitness System [VHS]', 1), ('B000002H3Z', 'Music', 'London 0 Hull 4', 3), ('6304071841', 'Movies & TV', 'Romeo & Juliet [VHS]', 2), ('0790732475', 'Movies & TV', 'Batman & Robin [VHS]', 1), ('0471178411', 'Books', 'Microsoft Exchange 5 Sourcebook', 2), ('6300271765', 'Movies & TV', 'Sphinx [VHS]', 1)]

RDD结构是(id,类别,标题,计数)。
我需要根据每个类别获得总共5个计数。
我尝试使用.takeOrdered()函数。没有达到结果。
我知道转换成DataFrame并做一个排名很容易。但是,要求只是使用RDD。

1sbrub3j

1sbrub3j1#

RDD中的takeOrdered(n,key)函数允许按特定列中的值排序,并在排序后返回n个行。

RDD.takeOrdered(5,lambda x: x[3])
  • 参考:takeOrdered
eqqqjvef

eqqqjvef2#

您可以按逆序排序并获得前五个元素。

sorted(RDD, key=lambda item: item[3], reverse=True)[:5]

会给你...

[('B000002H3Z', 'Music', 'London 0 Hull 4', 3),
 ('6302049040', 'Movies & TV', 'Pennies from Heaven [VHS]', 2),
 ('6304071841', 'Movies & TV', 'Romeo & Juliet [VHS]', 2),
 ('0471178411', 'Books', 'Microsoft Exchange 5 Sourcebook', 2),
 ('B000002KXA', 'Music', 'Rescue Me', 1)]

相关问题