hadoop - 如何找到 Pig 中一列的平均值和两列相减的平均值?

标签 hadoop apache-pig bigdata

我不熟悉使用 Pig Latin 编写脚本。我坚持要编写一个 pig 脚本,它会找到列值的平均值,还会找到两列之间相减值的平均值。

我正在从具有如下开始时间和结束时间列的 csv 文件中读取数据:

"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

我得到的 ILLUSTRATE 输出如下,我无法应用 AVG 函数。

------------------------------------------
-------------------------------------------------------------------------------------
| grouped     | group:int     | file:bag{:tuple(st:int,et:int)}                 | 
-------------------------------------------------------------------------------------
|             |               | {(, ), (, )}                                        | 
-------------------------------------------------------------------------------------

谁能帮我算出开始时间的平均值,这是 (23 + 32 + 54)/3 的结果

还有一些关于如何编写 (endtime -starttime)/no 的想法。记录(即本例中的 3 条记录)对我入门有很大帮助。

谢谢。

最佳答案

首先确保您正确加载数据。看起来您有双引号,即 "在您的数据周围。将数据加载为字符数组,替换双引号,然后将其转换为 int,最后在开始时间应用 AVG 函数.对于结束时间的平均值 - 开始时间只需减去 2 个字段并应用 AVG。

A = LOAD '/project/timestamp.csv' Using PigStorage(',') AS (st:chararray, et:chararray);
B = FOREACH A GENERATE (int)REPLACE(st,'\\"','') as st,(int)REPLACE(et,'\\"','') as et;
C = GROUP B ALL;
D = FOREACH C GENERATE AVG(B.st),AVG(B.et - B.st);

关于hadoop - 如何找到 Pig 中一列的平均值和两列相减的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643321/

相关文章:

php - 查找超过 100K 个位置之间的距离

hadoop - 哪一项任务将从SPARK中受益最多?

java - Spring Boot应用程序中的Hadoop distcp-ClassNotFoundException

hadoop - 在 map reduce 中引用来自 hadoop dfs 的文件

java - Impala + 拼花文件

hadoop - 在分组的行中查找“最大列数”。 [使用 pig ]

hadoop - pig 多查询优化问题

python-2.7 - pig 过滤器不工作

hadoop - 如何向 Elastic Search 数据库添加计算?

apache - 解决mapreduce.Cluster Failed to use org.apache.hadoop.mapred.YarnClientProtocolProvider due to error in instantiating YarnClient