gpt4 book ai didi

hadoop - apache pig 下的所有平均组合?

转载 作者:可可西里 更新时间:2023-11-01 14:53:52 24 4
gpt4 key购买 nike

我刚开始使用 apache pig 进行开发。我在 HDFS Measurements.csv 上存储了一个文件,其结构如下

    1;0x3333333333331091;21.2;67.5;2.1;2.0;12.2;15/04/2014 15:50    
2;0x3333333333331091;21.2;67.4;2.1;12.0;8.5;15/04/2014 14:22
3;0x3333333333331091;21.2;67.4;2.1;18.0;7.2;15/04/2014 14:22
4;0x3333333333331091;21.2;69.5;2.1;19.0;3.2;15/04/2014 14:22
5;0x3333333333331091;21.2;67.5;2.1;21.0;13.5;15/04/2014 14:22
6;0x3333333333331091;21.3;69.4;2.1;14.0;15.1;15/04/2014 14:22
7;0x3333333333331091;21.3;70.4;2.1;19.0;16.7;15/04/2014 14:22
8;0x3333333333331091;21.2;68.3;2.1;8.0;22.1;15/04/2014 14:22
9;0x3333333333331091;21.3;67.3;2.1;2.0;11.8;15/04/2014 14:23
10;0x3333333333331091;21.3;67.4;2.0;32.0;19.1;15/04/2014 14:23

我用命令加载它:

Mesure = LOAD 'dataTest/measurements.csv' USING PigStorage(';') as (idSensor:int, address:chararray, temperature:float, humidity:float, voltage:float, locX:float, locY:float, time:chararray );

我需要做的是

  • 计算所有对的温度平均值,包括第一行的温度。
  • 计算包括第一行温度在内的3个温度组成的温度的平均值
  • 计算由9个平均温度组成的平均温度,包括第一行的温度
  • 最后计算文件中所有温度组成的obe平均值。

谁能告诉我用 apache pig 做这个的方法。


经过自己难以回答的测试,我终于得到了以下结果。

我能够生成温度排列。但我想要的是通过列出组合而不是排列来消除冗余。

我按如下方式进行,首先,我只选择了一个温度列表,然后我做了两次,这样我就可以在两个列表上应用交叉运算符。

TEMP1 = FOREACH Mesure GENERATE temperature as temp1;
TEMP2 = FOREACH Mesure GENERATE temperature as temp2;

在那之后我穿过:

Result = CROSS TEMP1,TEMP2;

它显示的是这样的:

(21.3,21.3)
(21.3,21.3)
(21.3,21.2)
(21.3,21.3)
(21.3,21.3)
(21.3,21.2)
(21.3,21.2)
(21.3,21.2)
(21.3,21.2)
(21.3,21.2)
(21.3,21.3)
....

这就是我能做的,现在我想问,有没有什么东西可以删除对的复制?以及完成后如何计算每对的平均值。

最佳答案

这里是你可以做什么来获得 2 行的平均值 -

Mesure = LOAD 'filename' using PigStorage(';') as (idSensor:int, address, temperature:float, h, v, locx, locy,t); --since I am concerned with only the temperature and idSensor so I don't care about other fields.

TEMP1 = FOREACH Mesure GENERATE idSensor as num, temperature as t;
TEMP2 = FOREACH Mesure GENERATE idSensor as num, temperature as t;
B2 = CROSS TEMP1, TEMP2;
C2 = FOREACH B2 GENERATE TEMP1.num as firstnum, TEMP2.num as secondnum, ((TEMP1.t = TEMP2.t)/2);
Res2 = FILTER C2 BY firstnum <= secondnum;

此处 Res2 将为您提供两条线的平均结果。应向上移动过滤器以进行优化。您可以对多行​​执行相同的方式。

希望这对您有所帮助。

关于hadoop - apache pig 下的所有平均组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com