2016-06-27 11 views
0

Ich habe folgendes Schwein Script:Apache Pig Error - Warum es nicht akzeptieren alle Spalten in chararray

I'm trying with this: 

Source_Data = LOAD '/ user/cloudera/Source_Data /' mit PigStorage ('\ t ',' - tagFile '); Data_Schema = FOREACH Source_Data GENE ( (chararray) $ 1 AS Datum, (chararray) $ 2 AS-ID, (chararray) $ 3 AS-Intervall, (chararray) $ 4 AS-Code, (chararray) $ 5 AS S_In_Activity, (chararray) $ 6 AS S_Out_Activity, (Chararray) $ 7 AS C_In_Activity, (Chararray) $ 8 AS C_Out_Activity, (Chararray) $ 9 AS Traffic_Activity); STORE Data_Schema INTO '/ Benutzer/cloudera/Source_Data/New_Data /' VERWENDUNG PigStorage ('\ t');

Hier ist eine Reihe von meiner Quelle Daten:

11300 1387926000000 76 1,8190562337403677 0,9613115354827483 330,0372865843317554633 0,1161754442265068633 11,04195619825027733

Aber ich bin immer Fehler, wenn ich den Code ausführen, aber wenn ich die letzten entfernen Teil, um das Schema zu definieren, das es mir erfolgreich gibt. Beachten Sie, dass die erste Spalte von der Pig-Anweisung eingefügt wurde.

Antwort

0

Sie beantworten sich im Grunde die Frage im letzten Satz. Sie können das Schema nicht deklarieren, wenn Sie den STORE-Operator verwenden. Nach den official doc:

STORE alias INTO 'directory' [USING function]; 

In Ihrem Fall wird es einfach sein:

Data = LOAD '/user/cloudera/Source' using PigStorage('\t','-tagFile'); 

Data_prestage = FOREACH Data GENERATE (
(chararray)$1 AS Filename, 
(chararray)$2 AS CCode, 
(chararray)$3 AS SCode, 
(chararray)$4 AS In_Act, 
(chararray)$5 AS Out_Act, 
(chararray)$6 AS In_Act1; 

STORE Data_prestage INTO '/user/cloudera/Source/Data2/' USING PigStorage('\t'); 

Auch wenn Sie mit den Daten Manipulationen auf dem Tun Sie nicht vorhaben, anstatt mit STREAM vielleicht denken.

+0

Vielen Dank für Ihre Antwort! Es gibt immer noch einen Fehler, ich muss wahrscheinlich Python verwenden, um diese Daten in HDFS zu ändern – SaCvP

+0

Ich habe eine Antwort geändert. Wenn Sie die tagFie-Option verwenden, wird die Reihenfolge der Spalten geändert, sodass ich die Zählung von $ 1 anstatt von $ 0 starten musste. Entferne auch Leerzeichen und ersetze es durch Tabulator ('\ t'). Versuchen Sie auch, Ihren Job mit der Option -ColumnMapKeyPrune auszuführen. – madbitloman

Verwandte Themen