我的csv文件在第一行有标题。将它们加载到猪中会在任何后续功能(如SUM)上造成混乱。截至今天,我首先对加载的数据应用过滤器,以删除包含标题的行:
affaires = load 'affaires.csv' using PigStorage(',') as (NU_AFFA:chararray, date:chararray) ;
affaires = filter affaires by date matches '../../..';
我认为它作为一种方法有点愚蠢,我想知道是否有一种方法可以告诉猪不要加载csv的第一行,就像加载函数的“as_header”布尔参数一样。 我没有在doc上看到它。什么是最佳做法?你通常如何处理?
答案 0 :(得分:11)
CSVExcelStorage
加载程序支持跳过标题行,因此代替PigStorage
使用CSVExcelStorage
。下载piggybank.jar
并尝试此选项。
示例
input.csv
Name,Age,Location
a,10,chennai
b,20,banglore
PigScript :(使用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;
<强>输出:强>
(a,10,chennai)
(b,20,banglore)
<强>参考:强>
http://pig.apache.org/docs/r0.13.0/api/org/apache/pig/piggybank/storage/CSVExcelStorage.html
答案 1 :(得分:0)
Pig 0.9的另一个简单选项,不使用SKIP_INPUT_HEADER选项,可以按如下方式完成:
输入文件(input.txt)
<强> input.txt中强>
Name,Age,Location
a,10,chennai
b,20,banglore
PigScript :(不使用SKIP_INPUT_HEADER选项,因为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;
<强>输出:强>
(a,10,chennai)
(b,20,banglore)