1.用Hive对爬虫大作业产生的文本文件2.用Hive对爬虫大作业产生的csv文件进行数据分析,写一篇博客描述你的分析过程和分析结果。

1.用Hive对爬虫大作业产生的文本文件(或者英文词频统计下载的英文长篇小说)词频统计。

     a.开启

 

cd /usr/local

cd hive/lib

start-all.sh

 b.查看

 

Jps

c.将网络爬虫大作业的结果存入txt,并且保存到hdfs里面。

 

 

 

这是爬虫爬出来的数据

 

#新建路径/webinpt,蒋其存入/user/hadoop里面

hdfs dfs -mkdir /webinput

hdfs dfs -ls /user/hadoop

 

将爬虫大作业得到的数据写入创建的MuKeData.txt中,将其存入 /user/hadoop/webinput中,并且查看

gedit MuKeData.txt

hdfs dfs -put ./MuKeData.txt /user/hadoop/webinput

hdfs dfs -ls /user/hadoop/webinput

查看数据是否正确

 

 d.开启hiv

 

f.载入数据

 

load data inpath '/user/hadoop/MuKeData.txt' overwrite into table docs;

g.创建查表

 

create table Newword_count as select word,count(1) as count from(select explode(split(line,' ')) as word from docs ) word group by word order by word;

    h.查看表是否创建成果


 i.查看结果

2.用Hive对爬虫大作业产生的csv文件进行数据分析,写一篇博客描述你的分析过程和分析结果。

    首先,我是分析慕课网的课程页面,也就是我前面的文章,爬虫大作业分析的数据。下面开始进行HIVE分析。

    1.数据导入。因为我是用自己的数据进行分析,当然不免就要进行csv导出,其中用到了pandas,具体代码加入到爬虫数据中即可。

 

csv导出:

 

#导入pandas包

import pandas as pd

#这个根据各自的需求决定,用列表存储数据

listImg = []

listName=[]

listDesc =[]

#导出csv

ff.to_csv('MuKeData.csv')

 

如果遇到导出之后打开是错误乱码,则用txt进行转码即可。得到的数据,我是通过QQ邮箱进行传递,即电脑传入qq邮箱,linux登陆QQ邮箱下载。

      进入linux系统,为bigdatacase授权,才可以进行粘贴数据和后面的操作。

 

将自己的csv导入到bigdatacase里面,下载后直接移动和粘贴即可。

 

 当然,要的测试一下自己是否导入成功,看看自己的路径下面是否有自己的csv文件。我的路径是 /usr/local/bigdatacase ,

      跳转就不用说了吧?cd /usr/local/bigdatacase

 

如果上述的都没问题的话,那么下面就开始第二步,查表和建表。

       2.数据集的简单处理和预处理(预处理可以节省时间,而且可以作为“接口”一直调用)

      删除文件的第一条数据,也就是字段名称

#shell里面,sed主要是用于一些简单的文本替换

#就地修改文件:-i 删除:d  注意,是1d 不是id

sed -i  ‘1d’ MuKeData.csv

#如果电脑比较差,数据比较多,可以在head后面加一个限制 比如 -5

head MuKeData.csv

 

 预处理,创建一个脚本文件pre_deal.sh

#创建脚本

vim pre_deal.sh

#执行脚本,目标是csv 存储到user_table

bash ./pre_deal.sh MuKeData.csv user_table.txt

 

#!/bin/bash

infile=$1

outfile=$2

awk -F "," 'BEGIN{

         srand();

         id=0;

         Author[0]="Baby"; Author[1]="Teacher";Author[2]="srudnet";Author[3]="sanwich";Author[4]="mother";Author[5]="brother";Author[6]="sister";Author[7]="grandfather";Author[8]="world";Author[9]="woman";Author[10]="hambegerous";Author[11]="juny";Author[12]="Anmy";Author[13]="Archer";Author[14]="Sabar";Author[15]="basaka";Author[16]="pgone";Author[17]="yeah";Author[18]="benny";Author[19]="gai";Author[20]="manman";Author[21]="GGG";Author[22]="gba";Author[23]="none";Author[24]="qualicaton";Author[25]="wxf";

      }

      {

         id=id+1;

         value=int(rand()*26);

         print id"\t"$1"\t"$2"\t"$3"\t"$4"\t"$5"\t"substr($6,1,10)"\t"Author[value]

      }' $infile > $outfile

 具体的学习可以去http://www.runoob.com/linux/linux-comm-awk.html ,awk处理文本文件的语言。

 

最后查询数据,同时对以前的数据进行对比。      

head user_table.txt

     里面的数据

 

本身的数据

 

 数据如果问题,立马要停止去吧前面的做好。因为我的数据因为预处理排版问题出现了问题,所以对于后面的数据分析造成了一些影响。

      如果没有出现问题,就进行后面的步骤:导入到HDFS

     

      3.导入到HDFS

      开启HDFS

start-all.sh

jps

 

 

#HDFS上建立bigdatabasecase/dataset

hdfs dfs -nkdir -p /bigdatacase/dataset

hdfs dfs -ls /

 

 将user_table.txt存入到hdfs中的路径中:

        

hdfs dfs -put /usr/local/bigdatacase/user_table.txt /bogdatacase/dataset

 

最后,进行验证。

        

#验证hdfs,在相应的路径中查询是否有数据

hdfs dfs -cat /bigdatacase/dataset/user_table.txt | head -10

 

 

 如果上述没有问题,将进行导入到数据仓库HIVE中

      4.导入到HIVE数据仓库中

       启动MySQL数据库、Hadoop 

service mysql start

start-all.sh

 

       启动hive

 

创建数据库dblab

             

create database bdlab;

 

 创建外部表bdlab.bigdata_user,并且把‘/bigdatacase/dataset’目录下的数据加载到数据仓库Hive中。(注意,里面的列类,都是根据自己的实际需求进行更改,而且如果熟悉数据语言,进行相应的修改)

            

create external table bdlab.bigdata_user(id INT,user_id INT,img STRING,name String ,desn String,author string)comment 'user analyse' Row format delimited fields terminated by '\t' stored as textfile location '/bigdatacase/dataset';

 

最后,查看前面创的表(检查是否有问题):            

 select * from bdlab.bigdata_user limit 10;

 

 显示其中一个列的数据

 

因为自己在前面的预处理环境,数据表出现了问题,一开始没有重视,现在就会出现这种问题,也就会影响到后面的数据分析。

       如果没有什么问题,就到最后的数据分析。

 

      5.数据分析

       因为自己所爬到的数据对于数据分析不是很好,所以我弄了以下适合自己的数据方式进行分析:

                查询数据有多少条数:

select count(*) from bdlab.bigdata_user

 

不重复的id有多少条:

select count(distinct user_id) from bdlab.bigdata_user;

 

 查询name、desn和img是否相同,来进行检验:

select count(*) from (select id,user_id,img,name,desn,author from bdlab.bigdata_user group by id,user_id,img,name,desn,author having count(*)=1)a;

 

 

 

 

posted @ 2018-06-09 12:47  262罗肖凤  阅读(220)  评论(0编辑  收藏  举报