我有一個數據集,其中包含工人與他們的人口統計信息,如年齡性別,地址等及其工作地點。我從數據集創建了一個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