Hadoop 猪的AVG

Hadoop 猪的AVG,hadoop,apache-pig,Hadoop,Apache Pig,我需要得到每个性别组的平均年龄 这是我的数据集: 01::F::21::0001 02::M::31::21345 03::F::22::33323 04::F::18::123 05::M::31::14567 基本上这是 userid::gender::age::occupationid 因为有多个分隔符,所以我在stackoverflow中的某个地方读到,首先通过TextLoader()加载它 跑步后 dump average_age_of_testusers 这就是hdfs中的错误

我需要得到每个性别组的平均年龄

这是我的数据集:

01::F::21::0001
02::M::31::21345
03::F::22::33323
04::F::18::123
05::M::31::14567
基本上这是

userid::gender::age::occupationid
因为有多个分隔符,所以我在stackoverflow中的某个地方读到,首先通过TextLoader()加载它

跑步后

dump average_age_of_testusers
这就是hdfs中的错误

2016-10-31 13:39:22,175 [main] ERROR org.apache.pig.tools.pigstats.SimplePigStats - 
ERROR 0: Exception while executing (Name: grouped_testusers: Local Rearrange[tuple]{chararray}(false) - scope-284 Operator Key: scope-284): org.apache.pig.backend.executionengine.ExecException: 
ERROR 2106: Error while computing average in Initial 2016-10-31 13:39:22,175 [main] 

ERROR org.apache.pig.tools.pigstats.PigStatsUtil - 1 map reduce job(s) failed!

Input(s):
Failed to read data from "/user/cloudera/test/input/users.dat"

Output(s):
Failed to produce result in "hdfs://quickstart.cloudera:8020/tmp/temp-169204712/tmp-1755697117"
这是我第一次尝试用pig编程,所以如果解决方案非常明显,请原谅我

进一步分析,它似乎无法计算平均值,我认为我在数据类型上犯了错误,但年龄是int


如果你能帮助我,谢谢你

我在这篇文章中找到了问题所在。请参阅以获得更好的解释

但是,为了展示我所做的。。。我必须把我的数据

FOREACH loadusers GENERATE FLATTEN((tuple(int,chararray,int,int))  STRSPLIT(line,'::')) as (user:int,      gender:chararray,  age:int, occupation:int);

AVG失败,因为loadusers.age被视为字符串而不是int。

错误指出无法从输入文件读取数据。未能从“/user/cloudera/test/input/users.dat”读取数据。在load语句后,尝试转储loadusers;为了确保您正在加载数据。@好奇的我转储loadUsers,它正在工作。我转储了testusers,它也在工作。我在这里有点结巴。我相信这是有效的,但不知道为什么。毕竟,您的descripe After testusers将age显示为int。该字段可能是空的吗?因为当它进入AVG时,它显然不是一个字符。@DennisJaheruddin是的,我知道你的意思,这就是为什么我一开始感到无助,因为我不知道我错过了什么。删除/复制hdfs中的文件,确保它具有正确的权限等,我转储loadusers和testusers,他们都在工作,这是当我应用ave时出现的错误。实际上,我确实尝试在不使用FOREACH GENERATE flatte STRSPLIT的情况下加载同一个集合,我使用“:”作为分隔符,并且只使用额外的:as bytearray(因为原始分隔符实际上是::),当我加载它时,我应用了相同的ave,它工作正常。
FOREACH loadusers GENERATE FLATTEN((tuple(int,chararray,int,int))  STRSPLIT(line,'::')) as (user:int,      gender:chararray,  age:int, occupation:int);