文档章节

数据清洗很要命?那是因为你没看到这份攻略!

openfea
 openfea
发布于 2017/08/10 10:57
字数 1631
阅读 45
收藏 1
点赞 0
评论 0

对数据挖掘和分析的人员来说,数据清洗和转化是一项非常繁琐和复杂的工作,占用了很大的工作量。

目前,数据的挖掘和分析,基本都是采用pandas,numpy或者R语言,这种处理过程复杂,而且没有一个统一的规范。本文将给大家介绍一项技术,使用FEA-spk技术,可以快速实现数据的清洗和转化工作,而且任何人都能看懂。

FEA-spk技术,它的底层基于最流行的大数据开发框架spark,而且可以和很多流行大数据开发框架结合,比如Hadoop,hbase,mongodb等。使用FEA-spk来做交互分析,不但非常简单易懂,而且几乎和spark的功能一样强大,更重要的一点,它可以实现可视化,处理的数据规模更大,下面就实际的项目为例进行说明。

1. 要想使用FEA-spk技术,首先要创建一个spk的连接,所有的操作都是以它为上下文进行的。

在fea界面运行以下命令:

2. DataFrame的转换

FEA-spk技术操作有2种dataframe,一种是pandas的dataframe,可以直接在fea里面运行dump查看。另外一种是spark的dataframe,它能够进行各种各样的spark算子操作,比如group,agg等

spark dataframe需要转换为pandas的dataframe才能运行dump命令查看,转换的原语如下

pd= @udf df by spk.to_DF  #spark dataframe df转换为pandas dataframe pd

dump pd   #可以直接使用dump命令查看

sdf= @udf spk,pd by spk.to_SDF #将pandas dataframe pd转换为spark dataframe sdf,以便进行spark的各种操作

3. 导入数据源

FEA-spk技术支持各种各样的数据源,hive,mongodb,text,avro , json, csv , parquet,mysql,oracle, postgresql以及具有特定格式的文件

下面举其中几个为例进行说明

(1) 加载csv数据源。

csv数据源分为2种,第一种是带header的(即有字段名的),另外一种是没有header字段名的,格式稍有区别

a.csv文件格式如下

id,hash

1,ssss

2,333

3,5567

下面进行数据加载的命令。

原语如下

df= @udf spk by spk.load_csv with (header,/data/a.csv)

#header为具有字段名的,/data/a.csv为hdfs上的文件路径,如果没有heade字段,原语为df= @udf spk by spk.load_csv with (/data/a.csv)

  

(2)  关系型数据源的加载,比如mysql,oracle,postgresql等

首先需要定义一个json连接串,用来指定连接的地址,数据库名,用户名,密码。

格式如下

define mysql1  as ({"url":"jdbc:mysql://bigdata-89:3306","database":"test",

"user":"root","passwd":"123456"})

在mysql的test数据库里面有一张student_infos表,下面进行加载

df= @udf spk by spk.load_db with (mysql1,student_infos)

#加载student_infos表

(3)hive数据源的加载

在hive的mydb数据库里面有一张student表,下面来加载它

df= @udf spk by spk.load_hive with (mydb.student)

 

4. 对数据进行切割,提取对于日志分析数据来说,最重要的一步就是对数据进行切割,提取,这样才能进行下一步的分析。下面以美国宇航局肯尼迪航天中心WEB日志为例进行说明。

数据的下载地址为

http://ita.ee.lbl.gov/html/contrib/NASA-HTTP.html

下面就到了至关重要的一步了,对数据进行正则化提取,提取出其中的主机名,时间戳,路径,访问状态,返回的字节数这5个字段,原语命令如下

df1= @udf df by spk.reg_extract with (regexp_extract('value', r'^([^\s]+\s)', 1).alias("host"),

regexp_extract('value', r'^.*\[(\d\d/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} -\d{4})]', 1).alias('timestamp'),

regexp_extract('value', r'^.*"\w+\s+([^\s]+)\s+HTTP.*"', 1).alias('path'),

regexp_extract('value', r'^.*"\s+([^\s]+)', 1).cast('integer').alias('status'),

regexp_extract('value', r'^.*\s+(\d+)$', 1).cast('integer').alias('content_size'))

#将df表的value字段进行正则表达式提取出第一个匹配的主机名,将其重命名为host列

将df表的value字段进行正则表达式提取出第一个匹配的时间,将其重命名为timestamp列

将df表的value字段进行正则表达式提取出第一个匹配的路径,将其重命名为path列

将df表的value字段进行正则表达式提取出第一个匹配的状态码,将它的类型转化为int类型并将其重命名为status列

将df表的value字段进行正则表达式提取出第一个匹配的状态码,将它的类型转化为int类型并将其重命名为status列

将df表的value字段进行正则表达式提取出第一个匹配的字节数,将它的类型转化为int类型并将其重命名为content_size列

可以看到数据已经被切割成5列了

5. 清除无效语句

根据分析目标进行清洗得到所需要的数据,下面以fea经典的cd_esql为例进行说明

日志的格式如下:

下面过滤掉日志中的错误日志

正常的日志都包含有”-mylogger-”这个字段内容,根据这个特征过滤掉错误日志。

 df1= @udf df by spk.filter with (instr('value', '- mylogger -')<> 0)

# instr('value', '- mylogger -'),value字段如果不包含- mylogger -,返回0,否则返回它所在的索引。<>表示不为0,这样就过滤掉了错误日志。

6. 分割有效字段

经过无效语句清洗,保留有效语句,但是还是不能满足我们基础DF表的要求,下面进行有效字段的分割,提取。

有效的一条语句完整结构如下:

时间(精确到毫秒)/分割符(-mylogger-)/字符串(info-)/语句(事件)

2016-03-29 13:56:13,748 /- mylogger -/ INFO -/ select * from people_trail01_dest where KSSJ>=2001-02-28T01:05:24.000Z

整条语句中就是时间与事件是分析统计有用的,要从整条语句中分割出来,

原语如下所示。

df2= @udf df1 by spk.opfield with (split(value,'- mylogger - ')[0] as d1:split(value,'- mylogger - ')[1] as event)

#将df1表的value字段按照- mylogger –分割,第一个字段并存储到d1列中、提取第二个字段存储到event列中

可以看到event列还是不能满足要求,再进行分割

7. 提取时间,日期字段

对上面的数据提取天数

还有很多数据清洗攻略,我们将在下一篇继续介绍,敬请期待!

 

FEA-spk简单,强大,可视化

不懂Java,Python同样玩转Spark

专门为数据分析师打造!

© 著作权归作者所有

共有 人打赏支持
openfea
粉丝 13
博文 86
码字总数 95615
作品 1
杭州
其他
ansible filter_plugins插件实现jinja2自定义filter过滤器

前言: filterplugins是什么? 这个单词拆解下,filter ! 熟悉jinja2模板的人,到知道他是过滤器,可以在模板中以管道的方式用pyhton的代码处理字符串。 ansible模板调用的是jinja2,这个大...

rfyiamcool
2014/07/21
0
0
爬虫练习之数据整理——基于Pandas

上一篇->爬虫练习之数据清洗——基于Pandas 目的 本次数据整理的小目标是将薪资数据拿出来单独处理为统一的格式, 以便后续的数据统计分析和可视化操作 思路 先来看看数据有多丑 薪资原始数据...

謝增光_Feson
2017/07/26
0
0
关于request.getParameter(java.lang.String name)

//前段时间比较忙,好久不写日志了。总结个基础的问题,在Grails中写java代码果然会遭报应,出错了经常没提示... 问题重现:为了便于处理分页,在前端页面添加了一个参数,定义如下: <input...

小紅
2013/11/20
0
0
打造新圣魔大战简体中文终极版(H补丁、不能安装、运行问题)

原文地址为:打造新圣魔大战简体中文终极版(H补丁、不能安装、运行问题)

wangchaoqi1985
05/28
0
0
专门供开发者使用的免费的虚拟机资源:超能云 (SuperVessel Cloud)

真心的好资源,先告知大家,使用入门攻略参看http://my.oschina.net/u/1431433/blog/380643 注册登录网址:www.ptopenlab.com 这个SuperVessel云平台原来只面向高校老师和学生开放,因为羊年...

lindylin
2015/02/27
0
0
程序员练级攻略(2018) 与我的专栏

写极客时间8个月了,我的专栏现在有一些定的积累了,今天我想自己推荐一下我的专栏。因为最新的系列《程序员练级攻略(2018)版》正在连载中,我现有非足的自信向大家推荐我的这个技术专栏。...

陈皓
05/29
0
0
解密:天猫双十一1682亿背后的“霸下-七层流量清洗”系统

上古神话中,龙生九子,其六为赑屃(bi xi),又名霸下,力大无穷,喜负重。在阿里安全也有这么一套技术框架以此命名。 上古神兽——霸下 名如其意,霸下的责任是支撑阿里安全产品的底层技术框...

云栖社区
2017/11/20
0
0
2014年曾有个贴吧老哥48万入了100个比特币

     “如果当初,我买了一枚比特币……”相信许多人此刻都在这么想。看着它的价格高歌猛进,更悲伤的是那些本可以暴富的人。   而每当人们说起比特币,总绕不开“48万哥”——百度“比...

火星来的IT美少女
2017/12/15
0
0
什么是程序员思维?

今天想要说的就是这种程序员式思维,也即数据思维,用数据揭开事物的本质,探究事物的内在价值。 什么是数据思维? 「企业数据化管理变革」这本书中对数据思维是这么阐述的:数据思维是根据数...

egefcxzo3ha1x4
01/11
0
0
霸下-七层流量清洗提供安全防护新方案

12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的《2017阿里巴巴双11技术十二讲》顺利结束,集中为大家分享了2017双11背后的黑科技。本文是《霸下-七层流量清洗》演讲整理,主要讲解了霸...

阿里云云栖社区
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
7分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
7分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
10分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
13分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
13分钟前
0
0
Nginx配置error_page 404 500等自定义的错误页面

Nginx 做web server时, 开发中发现有时候的网站代码有错误,我们需要跳转到一个指定内容的错误页面: 1. 在nginx.conf配置文件上加上一句: fastcgi_intercept_errors on; 2. 服务中加上: er...

MichaelShu
16分钟前
0
0
微服务架构下的监控系统设计(一)——指标数据的采集展示

前言 微服务是一种架构风格,一个大型复杂软件应用通常由多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。...

UCloudTech
21分钟前
0
0
极客时间《趣谈网络协议》之开篇词学习笔记

出于个人兴趣,本人在极客时间购买了网易研究院云计算技术部的首席架构师刘超老师关于计算机网络的专栏之《趣谈网络协议》,由于知识版权原因,不能直接分享刘超老师的原文,所以,我会在每次...

aibinxiao
23分钟前
1
0
Activiti - 新一代的开源 BPM 引擎

Activiti 背景简介、服务和功能介绍 董 娜, 狄 浩, 和 张 晓篱 2012 年 7 月 23 日发布 背景介绍 Activiti 其核心是 BPMN 2.0 的流程引擎。BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准,全...

孟飞阳
29分钟前
0
0
最有效的方式来适配

最有效的方式来进行屏幕适配 在上代码之前先把屏幕相关的几个概念搞清楚:Density、DensityDpi、ScaleDensity。这里我们不过多讲解这些概念知识。 1.0 获取设计图的屏幕尺寸:这里我以360dp...

android-key
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部