我正在尝试将我的猪脚本的结果存储在.csv文件中,但我无法将其工作。 输入文件是一个gzip压缩文件并包含日志行,我的pig脚本的结果应该是.csv文件。
这是我的剧本
REGISTER /Volumes/work/pig-0.12.1/lib/AdhesePigUDF.jar;
REGISTER /Volumes/work/pig-0.12.1/contrib/piggybank/java/piggybank.jar;
DEFINE ConvertDateToWeekday com.doggybites.adhese.pig.ConvertDateToWeekday();
inptln = load '/Volumes/work/code/git/hadoop-utils/log.log' as (line:chararray);
-- filter out tracks
inptlnfilt = filter inptln by INDEXOF(line, '.track|') == -1;
inptlns = foreach inptlnfilt generate STRSPLIT(line, '\\|') as parts;
inpt4 = foreach inptlns {
weekday = (chararray)ConvertDateToWeekday(parts.$0);
request = STRSPLIT((chararray)parts.$3, '/');
generate weekday as weekday:chararray, parts.$2 as cookie:chararray, FLATTEN(TOKENIZE(REPLACE((chararray)request.$9, '\\u003B', ','))) as interest:chararray;
}
inpt5 = group inpt4 by (weekday, interest, cookie);
inpt6 = foreach inpt5 generate group.weekday, group.interest, group.cookie, COUNT(inpt4) as impressionPerContact;
inpt7 = group inpt6 by (weekday, interest);
inpt8 = foreach inpt7 generate group.weekday, group.interest, SUM(inpt6.impressionPerContact) as impressions, COUNT(inpt6.impressionPerContact) as contacts;
STORE inpt8 INTO 'csvTESTING.csv' USING PigStorage(',');
但是它只生成一个csvTESTING.csv文件夹并仍然将part-r-00000文件放入其中,因此不是我期望的.csv文件。
我也试过用这个:
STORE inpt8 INTO 'csvTESTING.csv' USING org.apache.pig.piggybank.storage.CSVExcelStorage(',','NO_MULTILINE','WINDOWS');
但结果相同。
所以任何帮助都会受到赞赏。
感谢。
答案 0 :(得分:2)
使用PigStorage
指定输出目录,而不是输出文件名。结果文件将类似于part-m / r-xxxx。
您可以执行以下操作:
fs -getmerge outputdir csvTESTING.csv
但是这会创建一个本地文件。
您可以使用fs -put