10.18小测(流量人数统计)

题目要求:给出result.txt文件,导入到mysql中,清洗日期格式,统计视频流量,可视化展示。

需要数据分析的内容:

1统计最受欢迎的视频/文章的Top10访问次数 (video/article

2按照地市统计最受欢迎的Top10课程 (ip

3按照流量统计最受欢迎的Top10课程 (traffic

 

软件准备:要准备虚拟机,zookeeper,hadoop,hive,正常启动服务。

这些都可以在尚硅谷或者黑马视频学习教程里安装,按着步骤来不会错的。

 

数据格式:

 

有俩个思路:

一种是把result.txt导入本地mysql中,完成日期格式清洗,再导入到hive中,完成查询操作,完成可视化。

第二种是直接导入到hive中,完成查询操作后,完成可视化。

 

我的做法:

导入到hive中,清洗日期格式有困难,所以我先在本地mysql完成日期格式清洗,把清洗好的数据导入hive,完成统计数据操作和可视化操作。

 

txt文件导入mysql,这个百度一下就有了,导入成功后,进行日期格式清洗。

txt文件中的日期格式是10/Nov/2016:00:01:02 +0800 这种格式,要换成2016-11-10 00:01:03这种,我是去java程序中完成的。

代码:

public static String[][] b = new String[2000][2]; 
    
    //读出正确日期格式字符串以及对应的ID存入数组中
    public static void qingXi() {
        //建立连接
        Connection connection=DBUtil.getConnection();
        PreparedStatement preparedStatement = null;
        ResultSet rs=null;
        
        //准备查询SQL语句
        String sql = "select ip,Data from b";
        Date parse_date;
        String finalDate = "";
        try {
            int i = 0;
            preparedStatement = connection.prepareStatement(sql);
            rs=preparedStatement.executeQuery();
            SimpleDateFormat input_date = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss");
            SimpleDateFormat output_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             while (rs.next()) {
                 String date = rs.getString("Data");
                 String ip = rs.getString("ip");
                 
                //将date根据“ ”分割成字符串数组
                 String[] a = date.split(" ");
                 //将Nov改成11
                    a[0] = a[0].replaceAll("Nov", "11");
                   try {
                       //将ID和清理好的数据格式存入二维数组中
                        parse_date = input_date.parse(a[0].trim());
                        finalDate = output_date.format(parse_date);
                        b[i][0] = finalDate;
                        b[i][1] = ip;
                        i++;
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }   
             }
        }catch(SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(rs, preparedStatement, connection);
        }
        
        
    }
    
    
    
    //根据ID修改数据库中字符串
    public static void run() {
        Connection connection=DBUtil.getConnection();
        PreparedStatement preparedStatement = null;
        //准备修改SQL语句
        String sql="update b set Data=? where ip = ?";
        int i = 0;
        try {
            while(true) {
                //修改数据库中的SQL
                preparedStatement = connection.prepareStatement(sql);
                preparedStatement.setString(1, b[i][0]);
                preparedStatement.setString(2, b[i][1]);
                preparedStatement.executeUpdate();
                i++;
                if(b[i][0] == null) {
                    break;
                }
            }
        }catch(SQLException e) {
             e.printStackTrace();
        }finally {
            //关闭资源
            
       DBUtil.close(preparedStatement,connection);
        }
    }

    
    //主函数
    public static void main(String[] args) {
        qingXi();
        run();
    }

在数据库中把清洗好的日期格式数据导出为csv文件,把csv放入虚拟机中。

用 <hive load data local inpath '路径' into table 表名; 导入到创建好的表中。

在数据表中进行数据统计,本质就是SQL语句,完成各个题目的数据统计。

用FineBI连接hive,完成可视化操作。(FineBI使用在黑马的hadoop教程最后,具体的看FineBI文档,可以完成数据下钻和联动)

 

posted @ 2022-10-18 22:22  听风1234  阅读(110)  评论(0编辑  收藏  举报