如何使用PySpark基于id将多行合并到单个单元格中?我有一个带有ID和产品的数据框。首先,我想将具有相同ID的产品合并到一个列表中,然后我想计算每个唯一列表的出现次数。
输入示例1:
id,product
1,HOME
1,mobile
2,watch
2,mobile
3,HOME
3,mobile
4,cd
4,music
4,video
输出:
product,count
HOME-mobile,2
mobile-watch,1
cd-music-video,1
示例2,带有sql代码:
输入示例:
cloths,brad
cloths,edu
cloths,keith
cloths,stef
enter,andr
enter,char
enter,danny
enter,lucas
代码:
SELECT
SS.SEC_NAME,
STUFF((SELECT '- ' + US.USR_NAME
FROM USRS US
WHERE US.SEC_ID = SS.SEC_ID
ORDER BY USR_NAME
FOR XML PATH('')), 1, 1, '') [SECTORS/USERS]
FROM SALES_SECTORS SS
GROUP BY SS.SEC_ID, SS.SEC_NAME
ORDER BY 1
输出:
cloths,brad-edu-keith-stef
enter,andr-char-danny-lucas
在此示例中,输出没有计数,但应包含它。
我想在PySpark而不是sql / pig中解决这个问题。
答案 0 :(得分:0)
你可以使用period
来做PySpark。 id列上的第一个组,将产品合并为一个排序列表。要计算此类列表的数量,请再次使用minute
并按groupby
汇总。
groupby
这应该为您提供如下数据框:
count