sql - 在 Apache Pig 中计算连接表中的总和

标签 sql hadoop join apache-pig

我从 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/

相关文章:

hadoop - 根据 hdfs 中的模式列出文件名

mysql - Sqoop 导入失败,出现 'on clause' 中的未知列

text - 将 ElasticSearch 与 Hadoop Map Reduce 结合使用

MySQL JOIN 与 WHERE IN

mysql - 在sql查询中组合多行并连接表

mysql - 选择所有,除非 MYSQL 中的特定单元格值

mysql - SQL仅选择列上具有最大值的行

sql - 使用递归 sql 计算平均成本(postgres 9.1)

SQL-从左连接中删除重复项

MySQL 在复杂查询中连接小表和大表 - 它们有多消耗?