Apache PIG:pigstorage 不添加扩展
Posted
技术标签:
【中文标题】Apache PIG:pigstorage 不添加扩展【英文标题】:Apache PIG: pigstorage doesn't add extension 【发布时间】:2014-04-29 07:53:27 【问题描述】:我正在尝试将我的 pig 脚本的结果存储在 .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');
但结果相同。
因此,我们将不胜感激。
谢谢。
【问题讨论】:
你可以让你的生活更轻松一些。似乎您的日志行已经包含分隔符 (|)。因此,如果您将其加载为分隔符(使用 PigStorage('\|')),您可以添加一个 as 语句,如 (date:chararray,whatever:chararray, somethingelse:chararray, somenumber:int, ...)。这样加载函数就已经为你完成了拆分。 【参考方案1】:PigStorage
指定输出目录,而不是输出文件名。结果文件将类似于 part-m/r-xxxx。
你可以这样做:
fs -getmerge outputdir csvTESTING.csv
然而,这会创建一个本地文件。
您可以使用 fs -put
将文件放回 HDFS
见http://pig.apache.org/docs/r0.11.0/cmds.html#fs
【讨论】:
在没有额外 hadoop 命令的情况下,沿着 Pig 中的 1 行查看更多内容。所以我们可以运行脚本并在该位置获取 csv。不过谢谢:) Pig 输出将始终在 HDFS 中,并且始终是一个零件文件。解决这个问题的唯一方法(据我所知)是在 Python 中使用 pig,这样你就可以从 python 脚本中启动你的 pig 东西,并在同一个 python 脚本中检索结果。以上是关于Apache PIG:pigstorage 不添加扩展的主要内容,如果未能解决你的问题,请参考以下文章
使用模式加载数据时出现 Apache Pig ClassCast 异常