【发布时间】:2018-03-27 07:02:05
【问题描述】:
我有一个数据集,其中包含员工的人口统计信息,例如年龄性别、地址等以及他们的工作地点。我从数据集中创建了一个 RDD 并将其转换为 DataFrame。
每个 ID 有多个条目。因此,我创建了一个 DataFrame,其中仅包含工人的 ID 和他/她工作过的各个办公地点。
|----------|----------------|
| **ID** **Office_Loc** |
|----------|----------------|
| 1 |Delhi, Mumbai, |
| | Gandhinagar |
|---------------------------|
| 2 | Delhi, Mandi |
|---------------------------|
| 3 |Hyderbad, Jaipur|
-----------------------------
我想根据每个员工的办公地点计算每个员工与其他员工的余弦相似度。
所以,我遍历了 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())
然后使用地图
cos_weight = ID_place_df.select("ID","office_location").rdd\
.map(lambda x: get_cosine(values,x[0],x[1]))
计算提取的行与整个DataFrame之间的余弦相似度。
我认为我的方法不是一个好的方法,因为我正在遍历 DataFrame 的行,它违背了使用 spark 的全部目的。 在pyspark中有更好的方法吗? 请多多指教。
【问题讨论】:
-
我觉得这个问题有点长。通常最好用最简单的情况询问问题,您会遇到同样的问题。
标签: python dataframe pyspark cosine-similarity