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 异常

Pig:无法使用 PigStorage 加载数据

使用'-tagFile'选项的项目文件名字段,使用PigStorage'-tagFile'加载,Pig 0.14

在 PIG 中处理货币价值 - pigstorage

Apache Pig 处理带有引号的字段的 CSV

在 PIG 中加载 CSV 文件