如何基于id将多行合并到单个单元格然后计数?

时间:2017-12-13 11:26:05

标签: python apache-spark dataframe pyspark

如何使用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中解决这个问题。

1 个答案:

答案 0 :(得分:0)

你可以使用period来做PySpark。 id列上的第一个组,将产品合并为一个排序列表。要计算此类列表的数量,请再次使用minute并按groupby汇总。

groupby

这应该为您提供如下数据框:

count