Pig:ERROR 1045:无法推断COUNT的匹配函数为多个或不适合。请使用明确的演员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pig:ERROR 1045:无法推断COUNT的匹配函数为多个或不适合。请使用明确的演员相关的知识,希望对你有一定的参考价值。

我试图通过Pig计算每个用户的推文。但我似乎碰到了一个问题。我和同学第一次使用Apache Pig(实际上是Hadoop和所有不同的组件)。我们正试图关注一些关于Twitter的案例,它为我们提供了一些代码。但是当我们尝试执行COUNT时,它会给我们以下错误:

错误1045:无法推断COUNT的匹配函数为多个或不适合。请使用明确的演员。

我们试图在互联网上做一些研究,但很难找到解决方案。我们尝试使用“Pig -x local”运行它,但也通过HDFS运行它。

我们要做的是在两个表上执行COGROUP,然后使用COUNT来计算每个用户的推文数量。

有关额外信息:我们在亚马逊的AWS上运行此功能。我不知道这是否有帮助。

链接到教程,以防万一:https://www.edureka.co/blog/pig-tutorial/链接到两个表之间COGROUP的DUMP的pastebin:https://pastebin.com/DAFhAJV4

这是我们到目前为止的代码:

UserData = LOAD 'hdfs://ourip/data/userv5.csv' using PigStorage(',') AS (Id:int,UserName:chararray);
TweetData = LOAD 'hdfs://ourip/data/tweetsv5.csv' using PigStorage(',') AS (UserId:int,Text:chararray);

groupby_user2 = COGROUP TweetData by 'UserId', UserData by 'Id';

count = FOREACH groupby_user2 GENERATE COUNT(Id);
dump COUNT;
答案

您上面分享的代码有三个问题。

  1. 你正在使用count这个名字作为你的一个关系,这可能会导致你的意思是别名count或函数count的含糊不清。我建议使用像twitter_count这样的不同名称。
  2. 关系名称区分大小写,因此如果您定义一个名为twitter_count的关系,然后尝试dump TWITTER_COUNT,您将收到错误。

我认为您在问题中引用的错误是上述1和2的组合。

  1. 即使您解决了我提到的问题,当您执行COUNT(Id)时仍会看到错误: Invalid field projection. Projected field [Id] does not exist in schema: group:chararray,TweetData:bag{:tuple(UserID:chararray)},UserData:bag{:tuple(Id:chararray)} 这是因为Id嵌套在包UserData中,所以你需要指定COUNT(UserData.Id)。但这是你的意思吗?这将为您提供每个组的用户数(可能为1)。我认为你的意思是计算推文的数量,如下所示: twitter_count = FOREACH groupby_user2 GENERATE COUNT(TweetData); dump twitter_count;

以上是关于Pig:ERROR 1045:无法推断COUNT的匹配函数为多个或不适合。请使用明确的演员的主要内容,如果未能解决你的问题,请参考以下文章

使用 pig 生成最大数量

猪拉丁语:错误 org.apache.pig.tools.grunt.Grunt - 错误 1045

在 Pig 中对元组中的所有字段应用 TRIM()

无法将 org.apache.pig.builtin.SUM 的匹配函数推断为多个匹配或都不匹配。请使用显式演员表

mysql新增用户无法登陆问题解决ERROR 1045 (28000)

无法推断 COUNT 函数