我对用Pig拉丁语写脚本还不熟悉。我一直在写一个pig脚本,它将找到一列值的平均值,也将找到两列之间减去的值的平均值。
我正在从一个csv文件中读取数据,该文件包含starttime和endtime列,如下所示:
"starttime","endtime",
"23","46",
"32","49",
"54","59"
到目前为止,我尝试的代码如下:
file = LOAD '/project/timestamp.csv' Using PigStorage(',') AS (st:int, et:int);
start_ts = FOREACH file GENERATE st;
grouped = group start_ts by st
ILLUSTRATE grouped
我得到的演示输出如下,我不能应用avg函数。
------------------------------------------
-------------------------------------------------------------------------------------
| grouped | group:int | file:bag{:tuple(st:int,et:int)} |
-------------------------------------------------------------------------------------
| | | {(, ), (, )} |
-------------------------------------------------------------------------------------
有谁能帮我算出(23+32+54)/3的平均开始时间吗
还有一些关于如何编码(endtime-starttime)/记录数(在本例中为3)的想法对我的入门有很大帮助。
谢谢。
3条答案
按热度按时间e3bfsja21#
试试这个
lg40wkob2#
首先确保正确加载数据。看起来您的数据周围有双引号,即“0”。将数据加载为chararray,替换双引号,然后将其转换为int,最后对starttime应用avg函数。对于endtime-starttime的avg,只需减去2个字段并应用avg。
xqk2d5yq3#
多亏了好奇的头脑。我的答案主要是根据他的答案稍加修改。这只是一列的平均值。