【问题标题】:Hive Query to find out the average rating of movies having rating more than 2Hive Query 找出评分超过 2 的电影的平均评分
【发布时间】:2021-01-05 16:12:07
【问题描述】:

我有一个名为 movierating 的表,包含以下字段:

| ColumnNO. | Name | DataType |

| Column1 | id | int |

| Column2 | movieid | int |

| Column3 | rating | int |

| Column4 | time | string |

我什至使用 SQL 查询为上述描述创建了表,并成功加载了数据。现在我应该编写一个 Hive 查询来找出评分超过 2 的电影的平均评分,将平均值四舍五入到小数点后两位并将输出保存在 output.txt 中。在 Bash 终端中,我输入了如下 Hive 命令(在收到 @SKM 的帮助后):

hive -e "select movieid, round(avg(rating), 2) from movierating group by movieid having avg(rating) > 2;" > output.txt

我什至曾向here 推荐过类似情况,但这对我没有多大帮助。

请看我运行查询后的截图:

当我运行命令以vim output.txt 打开 output.txt 文件时,我只得到一个没有数据的空白文件。我无法理解终端中描述的内容(如屏幕截图所示)。

查询建表:

create table if not exists movierating (id int, movieid int, rating int, time string);
load data local inpath '/tmp/Movie-rating.txt' overwrite into table movierating;

这是我参加的挑战的第一步。由于我是 hive 新手,所以我不太熟悉它的工作原理。

挑战说明:

第 1 步是使用上述字段创建表。

请在这方面帮助我。

基于评论

运行 @SKM 发送的查询后的输出:

【问题讨论】:

    标签: sql hive hiveql


    【解决方案1】:

    您可以像下面这样更改您的查询:

    hive -e "select movieid, round(avg(rating), 2) from movierating group by movieid having avg(rating) > 2;" > output.txt
    

    快照:

    【讨论】:

    • 您的查询似乎没有获取任何记录。请在不将结果重定向到文件的情况下运行查询。如果您看到输出,那么它肯定会将结果写入文件中。
    • 添加快照!
    • 所有步骤对我来说都是正确的。首先运行查询hive -S -e "select movieid, round(avg(rating), 2) from movierating group by movieid having avg(rating) > 2;",让我知道你可以在控制台上看到什么输出
    • 注意:-S 是静默模式
    • 使用制表符分隔格式加载数据解决了问题!
    猜你喜欢
    • 2021-09-27
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多