2015-10-31 1 views
2

У меня возникла странная проблема с функцией генерации свиньи, где, если я не использую первое поле, генерируемые данные кажутся неправильными. Это ожидаемое поведение?Pig Latin - метод генерации foreach не работает без первого поля

a = load '/input/temp2.txt' using PigStorage(' ','-tagFile') as  (fname:chararray,line:chararray) ; 
grunt> b = foreach a generate $1; 
grunt> dump b; 
     (temp2.txt) 
     (temp2.txt) 
grunt> c = foreach a generate $0,$1; 
grunt> dump c; 
     (temp2.txt,field1,field2) 
     (temp2.txt,field1,field22) 

$cat temp2.txt 
field1,field2 
field1,field22 


pig -version 
Apache Pig version 0.15.0 (r1682971) 
compiled Jun 01 2015, 11:44:35 

В примере я ожидал свалка б возвращать значение файла данных вместо имени файла

ответ

0

в вашем примере, вы используете PigStorage(' ','-tagFile'), так что каждая строка была разделены пробелом.

затем:

$ 0 -> field1, field2

$ 1 -> ничего,

просто использовать PigStorage(',','-tagFile').

+0

если вы видите мой пример .. Поле 1 - это имя файла. – enigma

+0

Я считаю, что поле ($ 1) ничего, почему вы получили имя файла с помощью 'generate $ 1', потому что '-tagFile' всегда показывает имя файла в первом столбце. – Porcelain

+0

, если вы ссылаетесь на документацию по свинью (http://pig.apache.org/docs/r0.15.0/func.html#pigstorage), упоминается «(« tagFile »). Добавить первый столбец указывает входной файл имя записи. ". – Porcelain