- Ich verwende Hive 1.2.1000.2.4.2.0-258.
- Es gibt 4850000+ Zeilen in der Tabelle, 14511 Reihen von A zwischen 73 und 74, und 3 cols- group_id, A und B.
- GROUP_ID ist eigentlich gleich 0.
- fast alle von A und B sind ganze Zahlen.
Ich wurde mit den folgenden Scripts Statistik Zusammenfassungen aus einer Tabelle zu finden:Hive Percentile_approx Funktion ist kaputt, nicht wahr?
select group_id, --group_id=0 a constant
percentile_approx(A , 0.5) as A_mdn,
percentile_approx(A , 0.25) as A_Q1,
percentile_approx(A , 0.75) as A_Q3,
percentile_approx(A , array(0.2,0.15, 0.1,0.05,0.025,0.001)) as A_i,
min(A) as min_A,
percentile_approx(B , 0.5) as B_mdn,
percentile_approx(B , 0.25) as B_Q1,
percentile_approx(B , 0.75) as B_Q3,
percentile_approx(B , array(0.8,0.85, 0.9, 0.95,0.975)) as B_i
from table
group by group_id;
Das Ergebnis was ich habe ist:
0
73.21058033222496
73.21058033222496
462.16968382794516
[73.21058033222496,73.21058033222496,73.21058033222496,73.21058033222496,73.21058033222496,73.21058033222496]
0.0
1.0
1.0
2.0
[2.0,3.0,4.0,8.11278644563614,17.0]
Dann wechsle ich den Code wie folgt:
select group_id, --group_id=0 a constant
percentile(cast(A as bigint), 0.5) as A_mdn,
percentile(cast(A as bigint), 0.25) as A_Q1,
percentile(cast(A as bigint), 0.75) as A_Q3,
percentile(cast(A as bigint), array(0.2,0.15, 0.1,0.05,0.025,0.001)) as A_i,
min(A) as min_A,
percentile(cast(B as bigint), 0.5) as B_mdn,
percentile(cast(B as bigint), 0.25) as B_Q1,
percentile(cast(B as bigint), 0.75) as B_Q3,
percentile(cast(B as bigint), array(0.8,0.85, 0.9, 0.95,0.975)) as B_i
from table
group by group_id
Das neue Ergebnis ist:
0
72.0
6.0
762.0
[3.0,1.0,1.0,0.0,0.0,0.0]
0.0
1.0
1.0
2.0
[2.0,3.0,4.0,9.0,17.0]
zu verdoppeln, die Wahrheit zu überprüfen, wir laden auch diese Tabelle R. Im Anschluss an dem R-Ergebnis:
A:
Min 0
Q1: 6
Median: 72
Q3: 762
0.2 quantile: 3
0.15 quantile: 1.5
0.1 quantile: 1
0.05 quantile: 0
0.025 quantile:0
0.001 quantile:0
B
Q1: 1
Median: 1
Q3: 2
0.8 quantile: 2
0.85 quantile: 3
0.9 quantile: 4
0.95 quantile: 9
0.975 quantile:17
Offensichtlich R Ergebnis steht im Einklang mit Perzentil-Funktion, aber percentile_approx gibt mir den falsche Antwort.
Mein Punkt ist, dass Ergebnis von Perzentil_approx falsch ist, nicht einmal ein "approx". –
Versuchen Sie Folgendes: percenttile_approx (A, 0,5,) als A_mdn – AkashNegi
Ignorieren Sie den obigen Kommentar. Versuchen Sie Folgendes: perzentil_approx (A, 0,5, [, 5000000]) als A_mdn. Der Parameter '5000000' sollte> Anzahl der unterschiedlichen Datensätze im Dataset sein. Sie haben gesagt, dass Sie 4.85m + Datensätze haben, also versuchen Sie, den obigen Befehl auszuführen und sehen Sie, ob die Ergebnisse näher sind. – AkashNegi