Ich habe einen Datensatz, der Arbeiter mit ihren demographischen Informationen wie Alter Geschlecht, Adresse usw. und ihren Arbeitsorten enthält. Ich habe eine RDD aus dem Dataset erstellt und in einen DataFrame konvertiert.Berechnung der Kosinusähnlichkeit zwischen allen Zeilen eines Datenrahmens in pyspark
Es gibt mehrere Einträge für jede ID. Daher habe ich einen DataFrame erstellt, der nur die ID des Mitarbeiters und die verschiedenen Bürostandorte enthält, an denen er/sie gearbeitet hat.
|----------|----------------|
| **ID** **Office_Loc** |
|----------|----------------|
| 1 |Delhi, Mumbai, |
| | Gandhinagar |
|---------------------------|
| 2 | Delhi, Mandi |
|---------------------------|
| 3 |Hyderbad, Jaipur|
-----------------------------
Ich möchte die Kosinusähnlichkeit zwischen jedem Arbeiter mit jedem anderen Arbeiter basierend auf ihren Bürostandorten 'berechnen.
So, iteriert I durch die Zeilen der Datenrahmen, um eine einzelne Zeile aus dem Datenrahmen abzurufen:
myIndex = 1
values = (ID_place_df.rdd.zipWithIndex()
.filter(lambda ((l, v), i): i == myIndex)
.map(lambda ((l,v), i): (l, v))
.collect())
und dann map
cos_weight = ID_place_df.select("ID","office_location").rdd\
.map(lambda x: get_cosine(values,x[0],x[1]))
zu berechnet, um die Cosinus-Ähnlichkeit zwischen der extrahierten Reihe unter Verwendung und der ganze DataFrame.
Ich glaube nicht, dass mein Ansatz gut ist, da ich durch die Zeilen des DataFrame iteriere, es vereitelt den ganzen Zweck der Verwendung von Funken. Gibt es einen besseren Weg, es in Pyspark zu tun? Bitte beraten.
Ich thibk es ein bisschen lon g Frage. Normalerweise ist es eine gute Übung, die Frage mit dem einfachsten Fall zu stellen, wenn Sie das gleiche Problem bekommen. – ChaosPredictor