Pypark中有一个Dataframe,数据如下:
id manager score
A x 3
A y 1
B a 2
B b 5
C f 2
D f 6
我期望得到的数据集中正好有n个id。
例如,如果我说需要3个ID,那么生成的数据集将如下所示:
id manager score
A x 3
A y 1
B a 2
B b 5
C f 2
所以这个数据集有5行,但是正好有3个ID。如果我做一个df.limit(3),它只会是前3个记录,因为ID是重复的,我会得到少于3个ID,即在这种情况下只有2个。如何进行?谢谢
5条答案
按热度按时间vfhzx4xs1#
这是一种使用“colllect\u set”函数和一些pythonic操作的简单方法:
1cosmwyk2#
您可以使用sparksql查询来实现这一点。
换个衣服就行了
limit
子查询中的子句值,以选择不同的id
.lf3rwulv3#
你也可以试试
StringIndexer
将每个字符串分解为id
列,然后filter
根据限制。b5buobof4#
我注意到上面的一个答案是基于sparksql的。
下面是另一种基于sparksql的方法,但是
WINDOW
条款-完整代码-
lvmkulzt5#
你可以简单地避免
join
由where id in (select distinct id ...limit 3)
如下所示-