【发布时间】:2018-08-22 15:44:34
【问题描述】:
我有以下 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 代码实现了这一点。
user
A [33, 44]
B [55, 66]
C [77]
D [11, 22]
E [11, 99]
F [66]
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 分布式编码中实现同样的功能?
【问题讨论】:
-
在集群数据框中,您的用户“A”属于两个集群。这是可能的还是错字?
-
只属于一个集群,只是重复而已。
标签: python pyspark bigdata spark-dataframe