猪:错误1045:无法推断出COUNT的匹配函数,因为它们是多个或都不适合。请使用显式强制转换

时间:2019-04-03 19:46:26

标签: hadoop apache-pig

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

  

错误1045:无法推断出COUNT的匹配函数,因为它们匹配或不适合。请使用显式强制转换。

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

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

有关其他信息:我们正在Amazon的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 个答案:

答案 0 :(得分:0)

您上面共享的代码存在三个问题。

  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;