In Hive möchte ich ein Array vom größten zum kleinsten sortieren und das Index-Array erhalten.
Die Tabelle sieht beispielsweise folgendermaßen aus:
id | value_array
1 | {30, 40, 10, 20}
2 | {10, 30, 40, 20}
Ich mit, um das zu bekommen:
id | value_array
1 | {1, 0, 3, 2}
2 | {2, 1, 3, 0}
Das Ergebnis ist der Index der Anfangselemente. Wie kann ich das erreichen?
Explodiere Array mit Posexplode, um Index und Wert zu erhalten, sortiere nach Wert, sammle Array von Index:
select id, collect_list(pos) as result_array
from
(
select s.id, a.pos, a.v
from your_table s
lateral view posexplode(s.value_array) a as pos, v
distribute by s.id sort by a.v DESC --sort by value
)s
group by id
;
Getestet, Ergebnis:
id result_array
1 [1,0,3,2]
2 [2,1,3,0]
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen