文章目录

  • 清洗有缺失的行(存在空值、null值等)
  • 改变分隔符
  • 提取年、月、日等信息
  • 去除第一个和最后一个字符

清洗有缺失的行(存在空值、null值等)

  • 源数据
[yao@master data]$ head -2 tmall-201412-1w.csv
13764633023 2014-12-01 02:20:42.000 全视目Allseelook 原宿风暴显色美瞳彩色隐形艺术眼镜1片 拍2包邮   33.6    2   18067781305
13377918580 2014-12-17 08:10:25.000 kilala可啦啦大美目大直径混血美瞳年抛彩色近视隐形眼镜2片包邮   19.8    2   17359010576

这个数据有1w行,一共9列,但是有些行的列上有空值、null值、空格等

  • 方法一:

通过awk命令去掉这些有缺失的行

[yao@master data]$ cat tmall_filter.sh
#!/bin/bash
infile=$1outfile=$2awk -F"\t" '{if($1 != "" && $2 != "" && $3 != "" && $4 != "" && $5 != "" && $6 != "" && $1 != "null" && $2 != "null" && $3 != "null" && $4 != "null" && $5 != "null" && $6 != "null" && $1 != " " && $2 != " " && $3 != " " && $4 != " " && $5 != " " && $6 != " ") print $0}' $infile > $outfile
  • 方法二:

1.创建临时表

CREATE TABLE IF NOT EXISTS tmall.tmall_201412_uid_pid(
uid STRING,
pid STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;

2.数据清洗
(1)初步填充、check 结果

INSERT OVERWRITE TABLE tmall.tmall_201412_uid_pid SELECT uid, pid from
tmall.tmall_201412;

下载 HDFS 文件到本地:

hadoop fs -get /user/hive/warehouse/tmall.db/tmall_201412_uid_pid/000000_0 .

打开本地文件:

vi 000000_0

执行查找命令:

/null

可以看到不少噪声数据,这些数据需要清洗,带 null、字段为""的等

(2)初步清洗

INSERT OVERWRITE TABLE tmall.tmall_201412_uid_pid select regexp_extract(uid, '^[0-9]*$', 0),regexp_extract(pid, '^[0-9]*$', 0) from tmall.tmall_201412 where regexp_extract(uid, '^[0-9]*$', 0) is not null and regexp_extract(uid, '^[0-9]*$', 0) != 'NULL' and regexp_extract(uid, '^[0-9]*$', 0) !='' and regexp_extract(uid, '^[0-9]*$', 0) != ' ' and regexp_extract(uid, '^[0-9]*$', 0) != 'null'  and regexp_extract(pid, '^[0-9]*$', 0) is not null and regexp_extract(pid, '^[0-9]*$', 0) != 'NULL' and regexp_extract(pid, '^[0-9]*$', 0) !='' and regexp_extract(pid, '^[0-9]*$', 0) != ' ' and regexp_extract(pid, '^[0-9]*$', 0) !='null' ;


改变分隔符

  • 源数据
[yao@master product]$ head -5 1-5.csv
香菜,2.8,4,4,4,2.2,山西汾阳市晋阳农副产品批发市场,山西,汾阳
大葱,2.8,2.8,2.8,2.8,2.6,山西汾阳市晋阳农副产品批发市场,山西,汾阳
葱头,1.6,1.6,1.6,1.6,1.6,山西汾阳市晋阳农副产品批发市场,山西,汾阳
大蒜,3.6,3.6,3.6,3.6,3,山西汾阳市晋阳农副产品批发市场,山西,汾阳
蒜苔,6.2,6.4,6.4,6.4,5.2,山西汾阳市晋阳农副产品批发市场,山西,汾阳[yao@master product]$ cat china-province.csv
河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,海南省,四川省,贵州省,云南省,陕西省,甘肃省,青海省,台湾省,内蒙古自治区,广西壮族自治区,西藏自治区,宁夏回族自治区,新疆维吾尔自治区,香港特别行政区,澳门特别行政区
  • 方法一:
    (1)将1-5.csv文件中的逗号分隔改为\t分隔
    打开本地文件
vim 1-5.csv

执行替换命令

:%s/','/'\t'/g

(2)清洗china-province.txt中数据,按照逗号切分,每行一个省份

vi filter.sh
#!/bin/bash
infile=$1
outfile=$2
awk -F"," '{for(i=1;i<=NF,i++)print $i}'$infile>$outfile[yao@master product]$ bash filter.sh /home/yao/data/product/china-province.csv /home/yao/data/product/province.csv
  • 方法二

(1)使用linux下的iconv 命令改变文件的编码(编码转换):

iconv -f GB2312 -t UTF-8 china-province01 -o china-province1
---------原本编码----新编码------原文件名---------新生成文件名---------//用\t分隔
awk -F "\t" '{print $1"\t"$2"\t2014/1/1\t"$7"\t"$8"\t"$9}' 1-5.csv > data//将逗号替换为\t
sed 's/,/\n/g' china-province.txt > china-province

vim编辑器中,将china-province中的省、自治区等字段去掉

:%s/,/\r/g
:%s/省//g

提取年、月、日等信息

  • 源数据
[yao@master hw]$ head -10 sogou_10w_ext
20171230000005  57375476989eea12893c0c3811607bcf    奇艺高清    1   1   http://www.qiyi.com/    2017    12  30  00
20171230000005  66c5bb7774e31d0a22278249b26bc83a    凡人修仙传   3   1   http://www.booksky.org/BookDetail.aspx?BookID=1050804&Level=1 2017    130 00
20171230000007  b97920521c78de70ac38e3713f524b50    本本联盟    1   1   http://www.bblianmeng.com/  2017    12  30  00
20171230000008  6961d0c97fe93701fc9c0d861d096cd9    华南师范大学图书馆   1   1   http://lib.scnu.edu.cn/ 2017    12  30  00
20171230000008  f2f5a21c764aebde1e8afcc2871e086f    在线代理    2   1   http://proxyie.cn/  2017    12  30  00
20171230000009  96994a0480e7e1edcaef67b20d8816b7    伟大导演    1   1   http://movie.douban.com/review/1128960/ 2017    12  30  00
20171230000009  698956eb07815439fe5f46e9a4503997    youku   1   1   http://www.youku.com/   2017    12  30  00
20171230000009  599cd26984f72ee68b2b6ebefccf6aed    安徽合肥365房产网  1   1   http://hf.house365.com/ 2017    12  30  00
20171230000010  f577230df7b6c532837cd16ab731f874    哈萨克网址大全 1   1   http://www.kz321.com/   2017    12  30  00
20171230000010  285f88780dd0659f5fc8acc7cc4949f2    IQ数码    1   1   http://www.iqshuma.com/ 2017    12  30  00

这个数据有500万行,第一列表示时间,但不是标准的时间格式如yyyy-MM-dd HH:mm:ss;同时还有一些缺失,比如存在null值、空值等

  • 扩展数据
    将第一列的时间的年、月、日、时通过substr()截取出来
[yao@master data]$ cat sogou-log-extend.sh
#!/bin/bash
#infile=/sogou.500w.utf8
infile=$1
#outfile=/sogou.500w.utf8.final
outfile=$2
awk -F '\t' '{print $0"\t"substr($1,0,4)"\t"substr($1,5,2)"\t"substr($1,7,2)"\t"substr($1,9,2)}' $infile > $outfile

后四列表示的分别是年、月、日、时

[yao@master hw]$ head -1 sogou_10w_ext
20171230000005  57375476989eea12893c0c3811607bcf    奇艺高清    1   1   http://www.qiyi.com/    2017    12  30  00
20171230000005  66c5bb7774e31d0a22278249b26bc83a    凡人修仙传   3   1   http://www.booksky.org/BookDetail.aspx?BookID=1050804&Level=1 2017    12  30  00
  • 清洗数据
    删除空值和空格
[yao@master data]$ cat sogou-log-filter.sh
#!/bin/bash
#infile=/data/sogou-data/sogou.500w.utf8
infile=$1
#outfile=/data/sogou-data/sogou.500w.utf8.final
outfile=$2
awk -F"\t" '{if($2 != "" && $3 != "" && $2 != " " && $3 != " ") print $0}' $infile > $outfile

去除第一个和最后一个字符

  • 测试数据
[yao@master data]$ cat test.txt
[12345]
[12345]
[12345]
[12345]
  • 去除第一个字符
[yao@master data]$ sed 's/.//' test.txt
12345]
12345]
12345]
12345]
  • 去掉第二个字符
[yao@master data]$ sed -r 's/]$//g' test.txt
[12345
[12345
[12345
[12345
[yao@master data]$ sed 's/.$//' test.txt
[12345
[12345
[12345
[12345
[yao@master data]$ awk '{sub(/.$/,"")}1' test.txt
[12345
[12345
[12345
[12345
[yao@master data]$ awk '{sub(/.{2}$/,"")}1' test.txt
[1234
[1234
[1234
[1234
  • 源数据
[{"beCommentWeiboId":"","beForwardWeiboId":"","catchTime":"1387159495","commentCount":"1419","content":"分享图片","createTime":"1386981067","info1":"","info2":"","info3":"","mlevel":"","musicurl":[],"pic_list":["http://ww3.sinaimg.cn/thumbnail/40d61044jw1ebixhnsiknj20qo0qognx.jpg"],"praiseCount":"5265","reportCount":"1285","source":"iPad客户端","userId":"1087770692","videourl":[],"weiboId":"3655325888057474","weiboUrl":"http://weibo.com/1087770692/AndhixO7g"}]
[{"beCommentWeiboId":"","beForwardWeiboId":"","catchTime":"1387159495","commentCount":"91","content":"行走:#去远方发现自己#@费勇主编,跨界明星联合执笔,分享他们观行思趣的心发现、他们的成长与心路历程,当当网限量赠送出品人@陈坤抄诵印刷版《心经》,赠完不再加印哦!详情请戳:http://t.cn/8k622Sj","createTime":"1386925242","info1":"","info2":"","info3":"","mlevel":"","musicurl":[],"pic_list":["http://ww4.sinaimg.cn/thumbnail/b2336177jw1ebi6j4twk7j20m80tkgra.jpg"],"praiseCount":"1","reportCount":"721","source":"","userId":"2989711735","videourl":[],"weiboId":"3655091741442099","weiboUrl":"http://weibo.com/2989711735/An7bE639F"}]
[{"beCommentWeiboId":"","beForwardWeiboId":"3655091741442099","catchTime":"1387159495","commentCount":"838","content":"抄诵“心经”为大家祈福,字不好,见谅!","createTime":"1386926798","info1":"","info2":"","info3":"","mlevel":"","musicurl":[],"pic_list":[],"praiseCount":"2586","reportCount":"693","source":"iPad客户端","userId":"1087770692","videourl":[],"weiboId":"3655098267456453","weiboUrl":"http://weibo.com/1087770692/An7mavhLn"}]

该数据需要用json解析,但不符合json的格式。并且解压后在一个目录下有多个文件。

  • 方法一:
//去掉第一个括号的脚本#!/bin/bash
dir=`ls /home/yao/data/weibo/619893`     //查看这个目录
dir_input="/home/yao/data/weibo/619893/"
dir_out="/home/yao/data/weibo/test/"
for i in $dir                               //如果文件在这个目录下就执行
doinfile=$dir_input$i                  //要被执行的文件就是dir_input下的第一个到最后一个文件sed 's/.//' $infile >> $dir_out/test.json           //执行后输出到dir_out目录下
done//去掉最后一个括号
awk '{sub(/.{2}$/,"")}1' test.json > data.json

清洗后load到hive的表中在进行json解析

  • 方法二:
    在hive里创建表,在加载的过程中通过substr()截取第二位和倒数第二位的字段
create table rate_weibo
select
get_json_object(line,'$.catchTime') as catchTime
as select substr(2,length(line-2) b from weibo_json)

或创建表并加载数据

create table weibo_json(line string) row format delimited;load data local inpath '/home/yao/data/weibo/test/data.json' overwrite into table weibo_json;

总结
在无数次的实验中,源数据去掉最后一个字符并没有去掉中括号,可能是中括号后有空格等因素影响,导致通过去掉最后两个字符才实现需求。
而substr()函数直接截取到我们想要的字符,更加的实用

20190328-几种数据清洗的方法相关推荐

  1. 带你了解常见的9种大数据分析方法

    大数据时代已然来临,企业的经营发展离不开对数据的收集.分析和挖掘.数据的收集一般采用以兔子动态ip代理辅助的爬虫技术,数据的分析则有科学的依据和细致个性化的方法,而数据挖掘是指从数据库的大量数据中揭示 ...

  2. python pandas数据清洗_Pandas进行数据清洗的方法介绍

    Pandas进行数据清洗的方法介绍,数据清洗是一项复杂且繁琐的工作,同时也是整个数据分析过程中最为重要的环节.Pandas中常见的数据清洗操作有空值和缺失值的处理.重复值的处理.异常值的处理.统一数据 ...

  3. 数据清洗的方法有哪些?

    现如今,科技得到了空前发展,正是由于这个原因,很多科学技术得到大幅度的进步.就在最近的几年里,出现了很多的名词,比如大数据.物联网.云计算.人工智能等.其中大数据的热度是最高的,这是因为现在很多的行业 ...

  4. python数据清洗的方法有哪些_7步搞定数据清洗-Python数据清洗指南

    作者:KOALA https://zhuanlan.zhihu.com/p/60241672 脏数据就是在物理上临时存在过,但在逻辑上不存在的数据. 数据清洗是整个数据分析过程的第一步,就像做一道菜之 ...

  5. 基于 Python 的 8 种常用抽样方法

    抽样是统计学.机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到.所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本. 上 ...

  6. 数据科学中常见的9种距离度量方法

    选自towardsdatascience 作者:Maarten Grootendorst 机器之心编译 编辑:陈萍 在数据挖掘中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距离.在本 ...

  7. 设置按钮不可见_华为手机居然有【3种录屏方法】,很多人都不知道,真的太实用了...

    使用华为手机已经有4-5年的时间了,感觉华为手机的功能越来越强大了,有很多功能让我对华为手机产生了粘性,如:局部截屏.滚动截屏.畅连通话.多屏协同等等,可见华为是真的在认真做产品.同样的,华为手机的录 ...

  8. [转]设计高效SQL: 一种视觉的方法

    原文地址:http://www.itpub.net/thread-1357925-1-1.html 英文原文:http://www.simple-talk.com/sql/performance/de ...

  9. GET和POST两种基本请求方法的区别

    GET和POST两种基本请求方法的区别 回退 回退时无害 会再次提交请求 记录 URL可被记录, 用于再访问 不可以 缓存 主动缓存 可手动设置 编码方式 只进行url编码 多种编码方式 参数长度 有 ...

  10. 哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现

    哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现 参考文章: (1)哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现 (2)https://www. ...

最新文章

  1. vue双击事件_我总结了12个Vue.js开发技巧和窍门
  2. “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
  3. 如何区别文本是BIG5还是GB
  4. oracle adjusting parallel,ora-29740故障求救
  5. 手机重装为linux,安卓手机重装系统的方法
  6. python编码及初体验
  7. 2012年真的是世界末日吗?_全球关注
  8. pre-trained模型的使用
  9. Hive学习(7)pmod()函数详解
  10. 性能测试培训总结-spotlight on mysql
  11. 空字符串和len()函数
  12. php 获取酷狗音乐真实地址
  13. 机器学习实战 —— 决策树(完整代码)
  14. 电子元件-TVS与肖特基二极管
  15. 电脑字体突然变细了:macOS Mojave 在非Retina屏幕下字体太细了怎么办
  16. 结合新的实际深化对自主创新的认识
  17. < Linux >:shell命令初步认识,Linux权限
  18. Visual Studio Code(vs code)函数跳转跟踪
  19. Python 爬取起点的小说(非vip)
  20. android屏幕适配测试

热门文章

  1. JavaScript的20个工具函数助力H5高效开发
  2. 猜拳php代码,微信猜拳游戏源码
  3. 双核不可阻挡!首款双核处理器Tegra2详解
  4. java实现 洛谷 P1427 小鱼的数字游戏
  5. 【云速建站】域名配置指导
  6. 四色定理java_java – 四色定理的递归算法
  7. python instagram 爬虫
  8. 【windows系统】插入移动硬盘后,有盘符,但提示需要格式化的解决办法
  9. 临床医学计算机思维的应用情况,【临床医学论文】临床医学教育中循证医学思维的应用(共6584字)...
  10. numpy 矩阵对角线_python – 使用numpy将矩阵更高的对角线清零