一、开发细节与风险控制
开发细节当中及伴随着各种各样的风险,并要及时反馈和处理风险,如果工作量评估、即使难度评估、人员变更、需求变更等等,故我们将两者放在一起,不可拆分
1.开发细节
共九个开发模块
1.1.确定源数据文件集合
步骤拆分
来源渠道
自从写网络爬虫采集:研发成本高、不是本职工作
公开数据集:五研发成本,公开数据质量高,数据量可大可小,按需获取即可
第三方数据买卖公司:无研发成本,需要付费才能获取
渠道选择
搜狗搜验室-http://www.sougou.com/labs/
多领域公开数据http://blog.csdn.net/marleylee/article/details/76587354
国外的公开数据集-https://site.douban.com/146782/widget/notes/15524697/note/519440833/
自行积累的公共数据集-https://mp.weixin.qq.com/s/8whZsvERs6zlUeYT677YyA
确定数据集
确定数据文件格式
确定数据结构及Demo数据查看
数据表(微博)结构
序号 | 字段名称 | 字段解释 | 备注 |
1 | mid | 消息的唯一id | 对官方mid的加密后的结果 |
2 | retweeted_status_mid | 转发的原创微博的mid | 如果该博文是转发,此值原博文的mid值 |
3 | uid | 微博主的id值 | |
4 | retweeted_uid | 转发的原创微博的uid | |
5 | source | 客户端 | 从哪个终端发布的消息 |
6 | image | 博文是否带着图 | |
7 | text | 博文内容 | |
8 | geo | 位置信息 | |
9 | created_at | 创建时间 | |
10 | deleted_last_seen | 微博被删除的时间 | 绝大多数为空 |
11 | permission_denied | 当微博被删除后,则该值不为空,设置成"permission denied" | 绝大多数为空 |
csv格式数据(comma-separated value)
mid,retweeted_status_mid,uid,retweeted_uid,source,image,text,geo,created_at,deleted_last_seen,permission_denied mcrP9nRPAQ,mZmwRlHE5R,uK3RXUJ0V,,新浪微博,0,//@ukn: ><//@uVGJCZUP4: 早上好! [兔子],,2012-01-02 19:21:57,, mevVsCECXg,mEjnc1nOt6,uK3RXUJ0V,,新浪微博,0,剛已經有人打電話告訴我了= =//@uK3RXUYW3: !!!!!!!!!!!@ukn: //@ukn: 啊啊啊啊啊啊啊撒啊啊//@uY02ZFLAN: 哈???????????? //@ukn: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!一苦!,,2012-01-02 19:21:19,, mUS9D2Kvpc,mAaBt22Ngj,uK3RXUJ0V,,新浪微博,0,//@ukn: [可愛]//@uB5NFPQVZ: 我们都知道的//@ukn: 利达。。这个。。不是只有你知道的事= =估计全世界都知道。。我要听只有你知道的啦!!,,2012-01-02 19:17:06,, |
将数据传输到hadoop客户端机器中,为数据传输到hive仓库做准备
洞察数据本身
总大小
掌握计算方法
准确及算法:看到全部数据后,通过命令求实际大小
评估及算法:通过对部分数据做精细化计算,然后推到到全局数据。
总文件个数或者说平均文件大小
掌握计算方法
总记录条数
可预见的最大/最小文件记录数
1.2 将源数据装载到hive仓库
步骤拆分
zip原始数据批量解压
在hive中创建weibo_origin和weibo_product两张同构表
将解压完成的明文每天数据文件,按天load到weibo_origin载入原始数据层
数据检验与校正
清洗原始数据表weibo_origin,按天分区插入到weibo_product表中
zip原始数据批量解压
zip原始位置
将zip包解压批量解压到指定目录/data1/weibo_text下
ls weibo/*.zip | xargs -n1 unzip -o -d weibo_text/
在hive中创建weibo_orgin 和 weibo_product两张同构表
建表脚本
表weibo_origin 脚本-textfile
CREATE external TABLE weibo_origin( mid string, retweeted_status_mid string, uid string, retweeted_uid string, source string, image string, text string, geo string, created_at string, deleted_last_seen string, permission_denied string ) comment 'weibo content table' partitioned by (day_seq string comment 'the day sequence') ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS textfile; |
表weibo_product脚本-orcfile(该表用任意hive支持的数据表格式均可)
CREATE TABLE weibo_product( mid string, retweeted_status_mid string, uid string, retweeted_uid string, source string, image string, text string, geo string, created_at string, deleted_last_seen string, permission_denied string ) comment 'weibo content table' partitioned by (day_seq string comment 'the day sequence') ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS orcfile; |
数据按天区分载入weibo——origin表
shell脚本load_to_weibo_origin.sh
#! /bin/bash #1、定义csv文件所在的目录 csv_root_dir_local=/home/zel/corpus_dw_hive/day_csv_data/ #2、定义csv上传到hdfs空间的目录 csv_root_dir_hdfs=/user/zel/csv_root_dir/ #3、获取csv的文件名称,作为分区表的分区字段值 csv_filename_list=`ls $csv_root_dir_local | cut -d . -f1` #4、进行遍历csv_filename_list集合,逐个处理csv文件的上传 for filename in $csv_filename_list do echo $filename #嵌入hdfs相关操作 #1、将本地csv上传到hdfs指定路径当中 hdfs dfs -copyFromLocal -f $csv_root_dir_local""$filename".csv" $csv_root_dir_hdfs #2、将hdfs的csv文件加载到指定的hive表分区当中 hive -e " use zel; load data inpath '$csv_root_dir_hdfs$filename.csv' overwrite into table weibo_origin partition(day_seq='$filename'); " #break done #脚本执行完成 |
shell脚本执行
常规测试执行
sh load to weibo_origin.sh
生产环境执行
相关命令
nohup
英文全称:NO HANG UP
不挂断的运行,可以使命令永久的执行下去,和用户终端没有关系
例如我们断开SSH连接都不会影响它的运行
关闭标准输入,终端不再能够接受任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件。
没有后台运行的意思,但有一些后台执行的形式在里边
”&“
在后台运行,但当用户会话退出(挂起)的时候,命令自动也跟着退出
命令连用:nohup [Command] &
命令永久的在后台执行,直到结束
最终脚本命令
nohup ./load to weibo_origin.sh &
数据检验与校正
校验导入数据的正确与否
样例数据查询是否正常(limil m,查看数据样例有无明显异常)
数据量级是否相同(主要是指数据当量,十成级、百万级)
数据完整性是否一致(主要是指别丢数据)
数据格式与字段是否对齐
校正方法
将数据的导入方式与数据表的解析方式保持一致
修改webo_origin 表创建脚本
CREATE external TABLE weibo_origin( mid string, retweeted_status_mid string, uid string, retweeted_uid string, source string, image string, text string, geo string, created_at string, deleted_last_seen string, permission_denied string ) comment 'weibo content table' partitioned by (day_seq string comment 'the day sequence') row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS textfile; |
将数据表weibo_origin经过清洗规则处理,按天分区载入weibo_product表
清洗逻辑
将每个表中的第一行字段名称去掉,属于多余的
清洗代码
from weibo_origin
insert overwrite table weibo_product partition(dat_seq)select * where mid1=‘mid’;
清洗完成效果
1.3 分词UDF编写
分词概述
此处主要指中文分词
中文分词(Chinese Word Segmentation,简称cws)
指的是将一个汉字序列(一段话)切成一个一个单独的的词的过程
分词的作用
中文分词是文本挖掘的基础,对于输入的一段文中,成功的进行中问分词,可以达到电脑自动识别语句含义的效果。
中文分词技术属于自然处理(nlp)技术范畴,对于一句话,人可以通过自己的只是来明白哪些是词过哪些不是,但如何让计算机也能理解?其处理过程为分词处理算法。
自然语言处理技术(NLP,Nature Language Process)
什么是自然语言
自然语言即人类的文字顿好口语,或其它用于沟通交流的形式
其为是人类智慧的结晶,自然语言处理是人工智能中最为困难的问题之一,而对自然语言处理的研究也是充满魅力和挑战
主要范畴
文本朗读(Text to speech)/语音(speech synthesis)
语音识别(Speech recognition)
中文自动分词(Chinese word segmentation)
词性标注(Part-of-speech tagging)
句法分析(Parsing)
自然语言生成(Natural language generation)
文本分类(Text categorization)
信息检索(Infromation retrieval)
信息抽取(Infromationem exrtaction)
文本校对(Text-proofing)
问答系统(Question answering)
机器翻译(Machine translation)
自动摘要(Automatic summarization)
文字蕴涵(Textual entailment)
处理难点
单词的边界界定
中文中的最小分隔单位是句子,词之间是没有分隔的。不像英文有显著的分隔
词义的消歧
中文博大精深
他说的确实在理/这的确是真的
长春市长春节讲话
旅游和服务是最好的
邓颖超生前最喜欢的一个东西
北京大学生前来应聘
小明骑着车子要倒了,小明一把把把把住了!
分词器选择
-
- c/c++
- ICTCLAS
- java分词器
- ansj分词(比较简单易用,本项目选择该分词器)
- hanLP分词
- mmseg
- IK分词
- jieba分词
- PaoDing分词
- 天亮分词器
- python
- jieba分词
- c/c++
ansj分词器应用集成
-
- 相关资料
- github主页:https://github.com/NLPchina/ansj_seg
- 在线学习手册:AnsjSeg 使用手册
- maven导入依赖jar包
- 相关资料