ich einen Eingang Datenrahmen des I Summe berechnen, Graf von mehreren Top-K-Werte auslösen
+---------------------------------+
|name| values |score |row_number|
+---------------------------------+
|A |1000 |0 |1 |
|B |947 |0 |2 |
|C |923 |1 |3 |
|D |900 |2 |4 |
|E |850 |3 |5 |
|F |800 |1 |6 |
+---------------------------------+
Format haben
müssen SUM Summe (Werte) zu erhalten, wenn Score> 0 und row_number < K (i, e) aller Werte, wenn der Wert> 0 für die oberen k Werte im Datenrahmen ist.
Ich bin in der Lage, dies zu erreichen, indem die folgende Abfrage für Top-100-Werte
val top_100_data = df.select(
count(when(col("score") > 0 and col("row_number")<=100, col("values"))).alias("count_100"),
sum(when(col("score") > 0 and col("row_number")<=100, col("values"))).alias("sum_filtered_100"),
sum(when(col("row_number") <=100, col(values))).alias("total_sum_100")
)
jedoch ausgeführt wird, muss ich Daten für Top 100.200.300 ...... 2500 holen. Das würde bedeuten, dass ich diese Abfrage 25 Mal ausführen und schließlich 25 Datenfelder zusammenführen müsste.
Ich bin neu zu funken und immer noch viele Dinge aus. Was wäre der beste Ansatz, um dieses Problem zu lösen?
Danke !!
Hallo! Danke für die Antwort, Das war sehr hilfreich !!. Also würde ich für jedes K 3 Spalten benötigen (sum_100_filtered_score, total_sum_100, count_filtered_score_100). Wenn ich dem Datensatz beitrete, erhalte ich für jedes Feld eine Spalte. Deshalb versuche ich Union – Vignesh
dafür zu benutzen. :) statt beitreten können Sie Union verwenden. –
sehe meine aktualisierte Antwort :) Sie können akzeptieren und upvote, wenn es Ihnen wirklich geholfen hat –