我有一个pyspark框架,有2列,ID
和condition
。ID对应一个用户,用户可以有多个条件。我想找出那些有条件A和条件B的用户,怎么做?
示例框架:
| ID|条件|
| --|--|
| 1 |一|
| 2 |B|
| 1 |B|
| 1 |C|
| 2 |C|
| 2 |D|
| 1 |E|
如果我想得到以A、B为条件的用户,我只需要1作为输出;如果我想得到以C、D为条件的用户,我只需要2作为输出;如果我想得到以B、C为条件的用户,我需要1和2作为输出。
这些要求以下列方框表示:
| sl_no|条件|
| --|--|
| S1| [A、B]|
| S2| [C、D]|
| S3| [B,C]|
我的尝试如下:
df1=df.groupBy('USER_ID').agg(F.collect_set('CONDITION').alias('conditions'))
df2=conditions_data
result=df1.join(df2,F.array_intersection(df1['conditions'],df2['conditions'])==df2['conditions'])
字符串
然而,我看到一些不一致的结果。同时,想知道是否有一个更好的方法来做到这一点。
1条答案
按热度按时间s71maibg1#
收集每个ID的唯一条件
字符串
将conditions_data与users对象框架联接,其中联接条件必须满足集合成员资格测试
型
收集condition_data中每个唯一行的用户
型