2016-03-23 6 views
-1

Ich habe Daten in Form von Shell, $ 917,14, $ 654.23,2013Pig min Befehl und Ordnung von

Ich habe den Minimalwert in der Spalte $ 1 bis herauszufinden und $ 2

Ich habe versucht, einen Auftrag zu tun durch diese Spalten von Asc Auftrag

Aber die Antwort ist nicht richtig herauskommen. Kann mir bitte jemand helfen?

Antwort

0

Siehe MIN

A = LOAD 'test1.txt' USING PigStorage(',') as (f1:chararray,f2:float,f3:float,f4:int,f5:int,f6:int); 
B = GROUP A ALL; 
C = FOREACH B GENERATE MIN(A.f2),MIN(A.f3); 
DUMP C; 

Output

EDIT1: Die Daten, die Sie geladen hat '$' in it.You werden entweder es aufzuräumen und es zu einem Schwimmerfeld laden zu Verwende die MIN-Funktion oder lade sie in ein Chararray und ersetze das '$' und wirf es dann auf float und wende die MIN-Funktion an.

EDIT2: Hier ist die Lösung, ohne die $ in den Originaldaten zu entfernen, aber im PigScript zu behandeln.

Eingang:

shell,$820.48,$11992.70,996,891,1629 
shell,$817.12,$2105.57,1087,845,1630 
Bharat,$974.48,$5479.10,965,827,1634 
Bharat,$943.70,$9162.57,939,895,1635 

PigScript

A = LOAD 'test5.txt' USING TextLoader() as (line:chararray); 
A1 = FOREACH A GENERATE REPLACE(line,'([^a-zA-Z0-9.,\\s]+)',''); 
B = FOREACH A1 GENERATE FLATTEN(STRSPLIT($0,',')); 
B1 = FOREACH B GENERATE $0,(float)$1,(float)$2,(int)$3,(int)$4,(int)$5; 
C = GROUP B1 ALL; 
D = FOREACH C GENERATE CONCAT('$',(chararray)MIN(B1.$1)),CONCAT('$',(chararray)MIN(B1.$2)); 
DUMP D; 

Output

Output

+0

I ha Ich habe versucht, diesen Befehl – Jig232

+0

Dies gibt nicht richtig ans – Jig232

+0

@Jigyasa Post Beispieldaten, Ihr Skript und erwartete Ausgabe.Sie versuchen zu bestimmen, welche Spalte ist weniger zwischen den 2 Spaltenwerte oder versuchen, den Mindestwert in 2 Spalten zu erhalten? –