Die Berechnung der Kosinus-ähnlichkeit zwischen allen Zeilen des dataframe in pyspark

Ich habe einen Datensatz mit Arbeiter mit Ihrer demographischen Daten wie Alter, Geschlecht,Anschrift usw.-und Ihrem Arbeitsort. Ich habe eine RDD aus dem dataset-Objekt und konvertiert es in ein DataFrame.

Gibt es mehrere Einträge für jede ID. Also, ich habe ein DataFrame die enthalten nur die ID der Arbeiter und die verschiedenen Büro-Standorte", dass er/Sie gearbeitet hatte.

    |---------- | ----------------|
    | **ID**    **Office_Loc**  |
    |---------- | ----------------|
    |   1      |Delhi, Mumbai,  |
    |          | Gandhinagar    |
    |---------------------------|
    |   2      | Delhi, Mandi   | 
    |---------------------------|
    |   3      |Hyderbad, Jaipur|
    -----------------------------

Möchte ich berechne die Kosinus-ähnlichkeit zwischen jeder Arbeitnehmer mit jedem anderen Arbeitnehmer, basierend auf Ihrer office-Standorte".

So, ich iteriert über die Zeilen des DataFrame, empfangen einer einzelnen Zeile aus der DataFrame :

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 mit Karte

    cos_weight = ID_place_df.select("ID","office_location").rdd\
  .map(lambda x: get_cosine(values,x[0],x[1]))

berechnet den Kosinus-ähnlichkeit zwischen der extrahierten Zeile und das ganze DataFrame.

Ich glaube nicht, dass mein Ansatz ist ein guter, da bin ich zu iterieren durch die Zeilen des DataFrame, es Niederlagen der ganze Zweck der Verwendung von spark.
Gibt es einen besseren Weg, es zu tun in pyspark?
Freundlich beraten.

  • Ich thibk es eine etwas lange Frage. In der Regel ist es eine gute Praxis, um Fragen der Aufgabe mit den einfachsten Fall, das Sie immer das gleiche Problem.
Schreibe einen Kommentar