2015-03-29 28 views
6

Moje pliki csv mają nagłówek w pierwszym wierszu. Załadowanie ich do świni powoduje bałagan w kolejnych funkcjach (jak SUM). Na dzień dzisiejszy po raz pierwszy zastosować filtr na danych załadowanych usunąć wiersze zawierające nagłówki:Hadoop Pig - Usuwanie nagłówka CSV

affaires = load 'affaires.csv' using PigStorage(',') as (NU_AFFA:chararray, date:chararray) ; 
affaires = filter affaires by date matches '../../..'; 

myślę, że to trochę głupie jako metoda, i zastanawiam się czy istnieje sposób, aby powiedzieć świnię nie ładować pierwszej linii csv, jak parametr boolowski "as_header" do funkcji load. Nie widzę tego na dokumencie. Jaka byłaby najlepsza praktyka? Jak zwykle sobie z tym radzisz?

Odpowiedz

11

CSVExcelStorage obsługa programu ładującego, aby pominąć wiersz nagłówka, więc zamiast PigStorage użyj CSVExcelStorage. Pobierz piggybank.jar i wypróbuj tę opcję.

przykład próbki

input.csv

Name,Age,Location 
a,10,chennai 
b,20,banglore 

PigScript (W wariancie SKIP_INPUT_HEADER)

REGISTER '/tmp/piggybank.jar'; 
A = LOAD 'input.csv' USING org.apache.pig.piggybank.storage.CSVExcelStorage(',', 'NO_MULTILINE', 'UNIX', 'SKIP_INPUT_HEADER'); 
DUMP A; 

wyjściowa:

(a,10,chennai) 
(b,20,banglore) 

referencyjny:
http://pig.apache.org/docs/r0.13.0/api/org/apache/pig/piggybank/storage/CSVExcelStorage.html

0

Innym prostym rozwiązaniem dla Pig 0,9, bez korzystania z opcji SKIP_INPUT_HEADER Można to zrobić w następujący sposób:

plik wejściowy (input.txt)

input.txt

Name,Age,Location 
a,10,chennai 
b,20,banglore 

PigScript (nie używając opcji SKIP_INPUT_HEADER, Rozwiązanie to nie jest dostępne w Pig 0,9)

register '<Your location>/piggybank.jar'; 
d_with_headers = LOAD 'input.csv' using org.apache.pig.piggybank.storage.CSVExcelStorage() AS (name:chararray, age:long, location:chararray); 

d = FILTER places_with_headers BY name!='Name'; 

dump d; 

wyjściowa:

(a,10,chennai) 
(b,20,banglore)