我有一个数据集,其中包含工人与他们的人口统计信息,如年龄性别,地址等及其工作地点。我从数据集创建了一个RDD并将其转换为DataFrame。计算pyspark中数据框的所有行之间的余弦相似度
每个ID有多个条目。因此,我创建了一个DataFrame,其中只包含工作人员的ID和他/她工作的各个办公地点。
|----------|----------------|
| **ID** **Office_Loc** |
|----------|----------------|
| 1 |Delhi, Mumbai, |
| | Gandhinagar |
|---------------------------|
| 2 | Delhi, Mandi |
|---------------------------|
| 3 |Hyderbad, Jaipur|
-----------------------------
我想根据他们的办公地点计算每个工人与其他工人之间的余弦相似度。
所以,我通过数据帧的行迭代中,从数据帧中检索的单个行:
myIndex = 1
values = (ID_place_df.rdd.zipWithIndex()
.filter(lambda ((l, v), i): i == myIndex)
.map(lambda ((l,v), i): (l, v))
.collect())
,然后使用地图
cos_weight = ID_place_df.select("ID","office_location").rdd\
.map(lambda x: get_cosine(values,x[0],x[1]))
到计算的余弦相似性所提取的行之间和整个DataFrame。
我不认为我的方法是一个很好的方法,因为我遍历DataFrame的行,它打败了使用spark的全部目的。 在pyspark有更好的方法吗? 请提醒。
我想了一会儿问题。通常最好的做法是用最简单的案例来问问你是否得到同样的问题。 – ChaosPredictor