我有一个数据集,其中包含工人的人口统计信息,如年龄性别,地址等及其工作地点.我从数据集创建了一个RDD并将其转换为DataFrame.
每个ID有多个条目.因此,我创建了一个DataFrame,其中只包含工人的ID和他/她工作过的各个办公地点.
|----------|----------------|
| **ID** **Office_Loc** |
|----------|----------------|
| 1 |Delhi, Mumbai, |
| | Gandhinagar |
|---------------------------|
| 2 | Delhi, Mandi |
|---------------------------|
| 3 |Hyderbad, Jaipur|
-----------------------------
Run Code Online (Sandbox Code Playgroud)
我想根据办公地点计算每个工人与其他工人之间的余弦相似度.
所以,我遍历了DataFrame的行,从DataFrame中检索了一行:
myIndex = 1
values = (ID_place_df.rdd.zipWithIndex()
.filter(lambda ((l, v), i): i == myIndex)
.map(lambda ((l,v), i): (l, v))
.collect())
Run Code Online (Sandbox Code Playgroud)
然后使用地图
cos_weight = ID_place_df.select("ID","office_location").rdd\
.map(lambda x: get_cosine(values,x[0],x[1]))
Run Code Online (Sandbox Code Playgroud)
计算提取的行和整个DataFrame之间的余弦相似度.
我不认为我的方法是好的,因为我在迭代DataFrame的行,它失败了使用spark的整个目的.在pyspark有更好的方法吗?好心提醒.