首先在Hive 中查看json_tuple 函数的详细信息

desc function extended json_tuple;

出现解释:

json_tuple(jsonStr, p1, p2, …, pn) - like get_json_object, but it takes multiple names and return a tuple. All the input parameters and output column types are string. |

jsonStr,就是我们自己的json数据文件名称,p1,p2,p3…等是json 数据的参数

例题

: **json格式的电影评分数据## **

  1. 首先解析json
    create table t_json(json string);
  2. 加载数据到表中
    select json_tuple(json,‘movie’,‘rate’,‘timeStamp’,‘uid’) as
    (movie,rate,ts,uid) from tb_json limit 20;

查看建表数据

|+--------+-------+------------+------+
| movie  | rate  |     ts     | uid  |
+--------+-------+------------+------+
| 1193   | 5     | 978300760  | 1    |
| 661    | 3     | 978302109  | 1    |
| 914    | 3     | 978301968  | 1    |
| 3408   | 4     | 978300275  | 1    |
| 2355   | 5     | 978824291  | 1    |
| 1197   | 3     | 978302268  | 1    |
| 1287   | 5     | 978302039  | 1    |
| 2804   | 5     | 978300719  | 1    |
| 594    | 4     | 978302268  | 1    |
| 919    | 4     | 978301368  | 1    |
+--------+-------+------------+------+|  |
  1. 将表数据创建到新表

create table tb_movie_rate as select json_tuple
(json,‘movie’,‘rate’,‘timeStamp’,‘uid’) as (movie,rate,st,uid) from
tb_json;

以上是将建立新表到后面练习可以用
接下来就是练习题:
1、统计每部电影的平均得分

create table tb_avg_rate as select movie, avg(rate) from
tb_movie_rate group by movie;

2、统计数据中一共有多少部电影

create table tb_cout_movie as select count(distinct movie) from
tb_movie_rate;

+--------------------+
| tb_cout_movie._c0  |
+--------------------+
| 3706               |
+--------------------+

3、统计每部电影的被评分次数(热门度)

create table tb_sum_movie as select movie, count(distinct uid) from
tb_movie_rate group by movie;

+---------------------+-------------------+
| tb_sum_movie.movie  | tb_sum_movie._c1  |
+---------------------+-------------------+
| 1                   | 2077              |
| 10                  | 888               |
| 100                 | 128               |
| 1000                | 20                |
| 1002                | 8                 |
| 1003                | 121               |
| 1004                | 101               |
| 1005                | 142               |
| 1006                | 78                |
| 1007                | 232               |
+---------------------+-------------------+

4、统计每个人的所有电影评分的平均值

create table tb_avg_movie as select uid, count(distinct rate) from
tb_movie_rate group by uid;

+-------------------+-------------------+
| tb_avg_movie.uid  | tb_avg_movie._c1  |
+-------------------+-------------------+
| NULL              | 1                 |
| 1                 | 5                 |
| 10                | 4                 |
| 100               | 5                 |
| 1000              | 4                 |
+-------------------+-------------------

5、查询出每个人评分最高的20部电影信息
第一步先筛选用户并且将评论排序,利用row_number函数和新窗口函数 over()。

select
*, row_number() over(partition by uid order by rate desc) rn from tb_movie_rate ;

+----------------------+---------------------+-------------------+--------------------+-----+
| tb_movie_rate.movie  | tb_movie_rate.rate  | tb_movie_rate.st  | tb_movie_rate.uid  | rn  |
+----------------------+---------------------+-------------------+--------------------+-----+
| 104                  | 4                   | 978298486         | NULL               | 1   |
| 1566                 | a                   | 978824330         | 1                  | 1   |
| 1035                 | 5                   | 978301753         | 1                  | 2   |
| 1287                 | 5                   | 978302039         | 1                  | 3   |
| 150                  | 5                   | 978301777         | 1                  | 4   |
| 1                    | 5                   | 978824268         | 1                  | 5   |
| 1028                 | 5                   | 978301777         | 1                  | 6   |
| 1029                 | 5                   | 978302205         | 1                  | 7   |
| 48                   | 5                   | 978824351         | 1                  | 8   |
| 1193                 | 5                   | 978300760         | 1                  | 9   |
| 2028                 | 5                   | 978301619         | 1                  | 10  |
| 1270                 | 5                   | 978300055         | 1                  | 11  |
| 1961                 | 5                   | 978301590         | 1                  | 12  |
| 595                  | 5                   | 978824268         | 1                  | 13  |
| 1836                 | 5                   | 978300172         | 1                  | 14  |
| 1022                 | 5                   | 978300055         | 1                  | 15  |
| 527                  | 5                   | 978824195         | 1                  | 16  |
| 2804                 | 5                   | 978300719         | 1                  | 17  |
| 2355                 | 5                   | 978824291         | 1                  | 18  |
| 3105                 | 5                   | 978301713         | 1                  | 19  |
+----------------------+---------------------+-------------------+--------------------+-----+

第二部在上面第一步的基础上筛选出最高分排名前20的电影,并创建一个新表存储数据。

create table tb_hight_rate as select uid,rate,rn,movie from ( select
*, row_number() over(partition by uid order by rate desc) rn from tb_movie_rate ) t where rn<=20;

+--------------------+---------------------+-------------------+----------------------+
| tb_hight_rate.uid  | tb_hight_rate.rate  | tb_hight_rate.rn  | tb_hight_rate.movie  |
+--------------------+---------------------+-------------------+----------------------+
| NULL               | 4                   | 1                 | 104                  |
| 1                  | a                   | 1                 | 1566                 |
| 1                  | 5                   | 2                 | 1035                 |
| 1                  | 5                   | 3                 | 1287                 |
| 1                  | 5                   | 4                 | 150                  |
| 1                  | 5                   | 5                 | 1                    |
| 1                  | 5                   | 6                 | 1028                 |
| 1                  | 5                   | 7                 | 1029                 |
| 1                  | 5                   | 8                 | 48                   |
| 1                  | 5                   | 9                 | 1193                 |
| 1                  | 5                   | 10                | 2028                 |
| 1                  | 5                   | 11                | 1270                 |
| 1                  | 5                   | 12                | 1961                 |
| 1                  | 5                   | 13                | 595                  |
| 1                  | 5                   | 14                | 1836                 |
| 1                  | 5                   | 15                | 1022                 |
| 1                  | 5                   | 16                | 527                  |
| 1                  | 5                   | 17                | 2804                 |
| 1                  | 5                   | 18                | 2355                 |
| 1                  | 5                   | 19                | 3105                 |
| 1                  | 4                   | 20                | 1207                 |
| 10                 | 5                   | 1                 | 953                  |
| 10                 | 5                   | 2                 | 3447                 |
| 10                 | 5                   | 3                 | 3087                 |
| 10                 | 5                   | 4                 | 1584                 |
| 10                 | 5                   | 5                 | 3259                 |
| 10                 | 5                   | 6                 | 1654                 |
| 10                 | 5                   | 7                 | 1653                 |
| 10                 | 5                   | 8                 | 1580                 |
| 10                 | 5                   | 9                 | 3155                 |
| 10                 | 5                   | 10                | 2571                 |
| 10                 | 5                   | 11                | 595                  |
| 10                 | 5                   | 12                | 594                  |
| 10                 | 5                   | 13                | 1079                 |
| 10                 | 5                   | 14                | 1148                 |
| 10                 | 5                   | 15                | 541                  |
| 10                 | 5                   | 16                | 2640                 |
| 10                 | 5                   | 17                | 1198                 |
| 10                 | 5                   | 18                | 1073                 |
| 10                 | 5                   | 19                | 2622                 |
| 10                 | 5                   | 20                | 1197                 |
| 100                | 5                   | 1                 | 800                  |
| 100                | 5                   | 2                 | 527                  |
| 100                | 5                   | 3                 | 919                  |
| 100                | 4                   | 4                 | 329                  |
| 100                | 4                   | 5                 | 2406                 |
| 100                | 4                   | 6                 | 260                  |
| 100                | 4                   | 7                 | 1291                 |
| 100                | 4                   | 8                 | 1197                 |
| 100                | 4                   | 9                 | 1196                 |
+--------------------+---------------------+-------------------+----------------------+
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐