2016-07-17 2 views
0

Я работаю с pig-0.16.0 Я пытаюсь объединить два файла с разделителями табуляции (.tsv) с помощью скрипта свиньи. Некоторые поля столбцов имеют целочисленный тип, поэтому я пытаюсь загрузить их как int. Но я вижу, что любые столбцы, которые я сделал «int», не загружаются данными, и они отображаются как пустые. Мое соединение не выдавало никакого результата, поэтому я сделал шаг назад и выяснил, что эта проблема возникла на этапе загрузки. Я вставив часть моего свинки сценария здесь:apache pig output null значения при загрузке с int datatype

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'; 

Я пытался использовать долго, но все тот же вопрос, только chararray казалось, работать здесь. Итак, что может быть проблемой?

Отрывки из двух входных .tsv файлов:

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

Я хотел бы предложить [редактировать] (http://stackoverflow.com/posts/38421717/ отредактируйте) свой вопрос, чтобы добавить небольшую часть входных файлов, чтобы другие пользователи могли попробовать и воспроизвести проблему (см. также [MCVE] (http://stackoverflow.com/help/mcve)). – lfurini

+0

Поиск данных, данных в вопросе данных, является строкой, поскольку она цитируется, т.е. «18» - это строка chararray ... –

ответ

0

Вы должны заменить кавычки, чтобы свинья знать его int или иначе он будет отображаться пустым. Вы должны использовать CSVLoader ИЛИ CSVExcelStorage см мои тесты:

Пример файла:

"1","test" 

Тест 1 - Использование CSVLoader:

Вы можете использовать CSVLoader или CSVExcelStorage, если вы хотите игнорировать кавычки - см example here

PIG Команды:

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); 

выход:

(1,test) 

Тест 2 - Замена двойные кавычки: Команды

свинью:

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

выход:

(1,"test") 

Тест 3 - с использованием данных, как это:

PIG команды:

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

Выход:

(,"test") 
+0

Wow благодарит BigDataLearner за советы. –

Смежные вопросы