我有一个数据集,A有时间戳,访问者,URL:
(2012-07-21T14:00:00.000Z, joe, hxxp:///www.aaa.com)
(2012-07-21T14:01:00.000Z, mary, hxxp://www.bbb.com)
(2012-07-21T14:02:00.000Z, joe, hxxp:///www.aaa.com)
Run Code Online (Sandbox Code Playgroud)
我想在一个时间窗口(例如10分钟)内测量每个用户每个用户的访问次数,但是作为一个滚动窗口,按分钟递增.输出将是:
(2012-07-21T14:00 to 2012-07-21T14:10, joe, hxxp://www.aaa.com, 2)
(2012-07-21T14:01 to 2012-07-21T14:11, joe, hxxp://www.aaa.com, 1)
Run Code Online (Sandbox Code Playgroud)
为了简化算术,我将时间戳更改为一天中的分钟,如下所示:
(840, joe, hxxp://www.aaa.com) /* 840 = 14:00 hrs x 60 + 00 mins) */
Run Code Online (Sandbox Code Playgroud)
要通过移动时间窗口迭代'A',我在当天创建一个分钟数据集B:
(0)
(1)
(2)
.
.
.
.
(1440)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做的事情如下:
A = load 'dataset1' AS (ts, visitor, uri)
B = load 'dataset2' as (minute)
foreach B {
C = filter A by ts > minute AND ts < minute + …Run Code Online (Sandbox Code Playgroud) 我现在正在学习如何使用Hadoop Pig.
如果我有这样的输入文件:
a,b,c,true
s,c,v,false
a,s,b,true
...
Run Code Online (Sandbox Code Playgroud)
最后一个字段是我需要计算的字段...所以我想知道这个文件中有多少'true'和'false'.
我尝试:
records = LOAD 'test/input.csv' USING PigStorage(',');
boolean = foreach records generate $3;
groups = group boolean all;
Run Code Online (Sandbox Code Playgroud)
现在我卡住了.我想用:
count = foreach groups generate count('true');"
Run Code Online (Sandbox Code Playgroud)
要获得"真实"的数量,但我总是得到错误:
2013-08-07 16:32:36,677 [main] ERROR org.apache.pig.tools.grunt.Grunt - 错误1070:无法使用导入解析计数:[,org.apache.pig.builtin.,org.apache .pig.impl.builtin.]日志文件的详细信息:/etc/pig/pig_1375911119028.log
谁能告诉我问题出在哪里?
我无法理解循环是如何group by group_name工作的foreach。
假设我们已经有一个名为的变量,grouped_data其定义为:
grouped_data = group dataset by (emp_id, dept_id);
Run Code Online (Sandbox Code Playgroud)
然后我们想要迭代每个记录并grouped_data添加聚合列。因此编写如下:
with_hours_worked = FOREACH grouped_data
GENERATE group AS grp,
SUM(dataset.worked_hours) AS hours ;
Run Code Online (Sandbox Code Playgroud)
我对最后一行发生的事情感到困惑,尤其是那group AS grp部分。是grp一个元组吗?线路是否grouped_data转换回组?如果是这样,为什么?
我正在尝试编写一个Pig脚本来压缩具有镶木地板格式数据的小文件.下面提到的行试图加载目录中的小文件,然后存储它们.这些文件具有复杂的嵌套结构,这些结构可以为空,并且它们包含许多NULLs.
LOGS = LOAD '/dt=20150307/hr=2015030700/*' USING parquet.pig.ParquetLoader();
STORE LOGS INTO '/user/compaction_output' USING parquet.pig.ParquetStorer();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
2015-04-29 17:00:45,883 [main] ERROR org.apache.pig.tools.pigstats.SimplePigStats - ERROR 2118: Cannot build an empty group
Run Code Online (Sandbox Code Playgroud)
我怀疑是因为输入文件中的空值.有人可以帮忙吗?
我一直在编写这个Pig Latin程序,将英语转换为猪拉丁语,我一直在实现读取文件然后将其输出到另一个txt文件时遇到问题.
这是我到目前为止,但它不会编译因为
outputFile << pigLatin(englishWord) << ' ';
Run Code Online (Sandbox Code Playgroud)
这是源代码.有什么建议让它工作?谢谢
void pigLatin(string englishWord)
{
string piglatinWord;
bool truefalse = false;
int letter = 0, wordLength = englishWord.length( );
while (!truefalse && letter < wordLength)
{
if (englishWord.substr(letter,1) == "a" || englishWord.substr(letter,1) == "e" ||englishWord.substr(letter,1) == "i" || englishWord.substr(letter,1) == "o" || englishWord.substr(letter,1) == "u")
truefalse = true;
else
letter++;
}
if (letter > wordLength)
piglatinWord = englishWord + "-way ";
else
piglatinWord = englishWord.substr(letter, wordLength-letter) + englishWord.substr(0,letter)+ "-ay " ; …Run Code Online (Sandbox Code Playgroud)