2015-03-29 3 views
6

Meine csv-Dateien haben Header in der ersten Zeile. Wenn Sie sie in ein Schwein laden, entsteht bei nachfolgenden Funktionen (wie SUM) ein Chaos. Ab heute wende ich zunächst einen Filter auf die geladenen Daten die Zeilen enthalten, die Header zu entfernen: denkenHadoop Pig - Entfernen von csv-Header

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

ich es ein bisschen dumm, wie ein Verfahren ist, und ich frage mich, entweder gibt es eine Möglichkeit Schwein zu sagen, Die erste Zeile des CSV wird nicht geladen, wie ein "as_header" boolescher Parameter für die Ladefunktion. Ich sehe es nicht auf dem Dokument. Was wäre eine gute Praxis? Wie gehst du normalerweise damit um?

Antwort

11

CSVExcelStorage Loader-Unterstützung, um die Kopfzeile zu überspringen, statt PigStorageCSVExcelStorage verwenden. Laden Sie piggybank.jar herunter und probieren Sie diese Option aus.

Musterbeispiel

input.csv

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

PigScript: (Mit SKIP_INPUT_HEADER Option)

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

Ausgang:

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

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

0

Eine weitere einfache Möglichkeit für Pig 0,9, ohne SKIP_INPUT_HEADER Option kann wie folgt vorgenommen werden:

Eingabedatei (input.txt)

input.txt

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

PigScript: (Ohne SKIP_INPUT_HEADER Option, da diese Option in Pig 0.9 nicht verfügbar ist)

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; 

Ausgang:

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