2016-07-17 11 views
0

Ich arbeite mit Pig-0.16.0 Ich versuche, zwei Tab-getrennte Dateien (.tsv) mit Schwein Skript zu verbinden. Einige der Spaltenfelder sind vom Integer-Typ, also versuche ich, sie als int zu laden. Aber ich sehe, dass die Spalten, die ich 'int' gemacht habe, nicht mit Daten geladen sind, und sie werden als leer angezeigt. Mein Join gab kein Ergebnis aus, also trat ich einen Schritt zurück und fand heraus, dass dieses Problem beim Laden aufgetreten ist. Ich bin Einfügen einen Teil meines Schwein Skript hier:Apache Pig Ausgabe Nullwerte beim Laden mit Int-Datentyp

REGISTER /usr/local/pig/lib/piggybank.jar; 
-- $0 = streaminputs/forum_node.tsv 
-- $1 = streaminputs/forum_users.tsv 
u_f_n = LOAD '$file1' USING PigStorage('\t') AS (id: long, title: chararray, tagnames: chararray, author_id: long, body: chararray, node_type: chararray, parent_id: long, abs_parent_id: long, added_at: chararray, score: int, state_string: chararray, last_edited_id: long, last_activity_by_id: long, last_activity_at: chararray, active_revision_id: int, extra:chararray, extra_ref_id: int, extra_count:int, marked: chararray); 

LUFN = LIMIT u_f_n 10; 

STORE LUFN INTO 'pigout/LN'; 

u_f_u = LOAD '$file2' USING PigStorage('\t') AS (author_id: long, reputation: chararray, gold: chararray, silver: chararray, bronze: chararray); 

LUFUU = LIMIT u_f_u 10; 

STORE LUFUU INTO 'pigout/LU'; 

ich lange versucht, mit, aber immer noch das gleiche Problem, nur chararray schien hier zu arbeiten. Also, was könnte das Problem sein?

Snippets aus zwei Eingangs .tsv Dateien:

forum_nodes.tsv:

"id" "title" "tagnames" "author_id" "body" "node_type" "parent_id" "abs_parent_id" "added_at" "score" "state_string" "last_edited_id" "last_activity_by_id" "last_activity_at" "active_revision_id" "extra" "extra_ref_id" "extra_count" "marked" 
"5339" "Whether pdf of Unit and Homework is available?" "cs101 pdf" "100000458" "" "question" "\N" "\N" "2012-02-25 08:09:06.787181+00" "1" "" "\N" "100000921" "2012-02-25 08:11:01.623548+00" "6922" "\N" "\N" "204" "f" 

forum_users.tsv:

"user_ptr_id" "reputation" "gold" "silver" "bronze" 
"100006402" "18" "0" "0" "0" 
"100022094" "6354" "4" "12" "50" 
"100018705" "76" "0" "3" "4" 
"100021176" "213" "0" "1" "5" 
"100045508" "505" "0" "1" "5" 
+0

Ich würde vorschlagen, [Bearbeitung] (http://stackoverflow.com/posts/38421717/ Bearbeiten Sie Ihre Frage, um einen kurzen Teil der Eingabedateien hinzuzufügen, damit andere Benutzer versuchen können, das Problem zu reproduzieren (siehe auch [MCVE] (http://stackoverflow.com/help/mcve)). – lfurini

+0

suchen Daten geteilt in Frage Daten ist String, wie es zitiert wird, dh "18" ist String Chararray ... –

Antwort

0

Sie müssen Anführungszeichen ersetzen Schwein wissen lassen, seine int oder Ansonsten wird es leer angezeigt. Sie sollten meine Tests CSVLoader OR CSVExcelStorage finden Sie verwenden:

Beispieldatei:

"1","test" 

Test 1 - Mit CSVLoader:

Sie können CSVLoader oder CSVExcelStorage verwenden, wenn Sie Anführungszeichen ignoriert werden sollen - siehe example here

PIG Befehle:

register '/usr/lib/pig/piggybank.jar' ; 
define CSVLoader org.apache.pig.piggybank.storage.CSVLoader(); 
file1 = load 'file1.txt' using CSVLoader(',') as (f1:int, f2:chararray); 

Ausgang:

(1,test) 

Test 2 - Ersetzen doppelte Anführungszeichen:

PIG-Befehle:

file1 = load 'file1.txt' using PigStorage(','); 
data = foreach file1 generate REPLACE($0,'\\"','') as (f1:int) ,$1 as (f2:chararray); 

Ausgang:

(1,"test") 

-Test 3 - unter Verwendung von Daten, wie sie ist:

PIG-Befehle:

file1 = load 'file1.txt' using PigStorage(',') as (f1:int, f2:chararray); 

Ausgang:

(,"test") 
+0

Wow danke BigDataLearner für die Tipps. –