我从 Hive 加载以下三个表:
books = LOAD 'books' USING org.apache.hive.hcatalog.pig.HCatLoader() AS (isbn_b: chararray, booktitle: chararray, author: chararray, pubyear: chararray, publisher: chararray, urls: chararray, urlm: chararray, urll: chararray);
users = LOAD 'users' USING org.apache.hive.hcatalog.pig.HCatLoader() AS (id_u: chararray, location: chararray, age: chararray);
ratings = LOAD 'ratings' USING org.apache.hive.hcatalog.pig.HCatLoader() AS (id_r: chararray, isbn_r: chararray, rating: chararray);
然后我按如下方式加入并将它们分组:
OnISBN = JOIN ratings BY isbn_r, books BY isbn_b;
total = JOIN OnISBN BY id_r, users BY id_u;
loc_group = GROUP total BY location;
当我运行命令时:
final = FOREACH loc_group GENERATE
group as location,
COUNT(total) as rec_num,
SUM(total.rating) as book_rating_sum;
我得到一个Could not infer the matching function for org.apache.pig.builtin.SUM as multiple or them none fit。请使用显式转换。
错误。我认为这是因为在 SUM
语句中我没有正确引用 rating
但这是因为我是 Pig 的新手。我想要的输出是以下格式的内容:
(位置、计数、该位置的评分总和)
我知道这是非常小的事情,但我已经为此奋斗了一段时间,但我被困住了。我将不胜感激。
最佳答案
您的评分是字符数组,但 SUM
需要数字输入。在您的 LOAD
语句中将其作为数字类型读取,例如rating: float
,或将其放入您的求和中,例如SUM((float)total.rating)
。
关于sql - 在 Apache Pig 中计算连接表中的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43793975/