我已经在下面的DataFrame中实现了预期的python输出。但我想把它变成pyspark。在
d = {'user': ['A', 'A', 'B','B','C', 'D', 'C', 'E', 'D', 'E', 'F', 'F'], 'songs' : [11,22,99,11,11,44,66,66,33,55,11,77]}
data = pd.DataFrame(data = d)
e = {'user': ['A', 'B','C', 'D', 'E', 'F','A'], 'cluster': [1,2,3,1,2,3,2]}
clus = pd.DataFrame(data= e)
期望输出:我希望实现特定集群的用户没有听到的所有歌曲。A belongs to cluster 1, and cluster 1 has songs [11,22,33,44] so A hasnt listened to [33,44]
所以我使用下面的python代码实现了这一点。在
PYTHON代码:
df = pd.merge(data, clus, on='user', how='left').drop_duplicates(['user','movie'])
df1 = (df.groupby(['cluster']).apply(lambda x: x.pivot('user','movie','cluster').isnull())
.fillna(False)
.reset_index(level=0, drop=True)
.sort_index())
s = np.where(df1, ['{}'.format(x) for x in df1.columns], '')
#remove empty values
s1 = pd.Series([''.join(x).strip(', ') for x in s], index=df1.index)
print (s1)
在pyspark分布式编码中实现同样的效果?在
可能有比这更好的解决办法,但它是有效的。在
假设每个用户只属于一个集群
这给了我们
^{pr2}$创建集群假设每个用户只属于一个集群
现在,我们得到用户听到的所有歌曲及其群集
最后,计算集群中听到的所有歌曲,以及该集群中用户未听到的所有歌曲
我们得到的输出是
相关问题 更多 >
编程相关推荐