修改Logstash的@timestamp字段为业务时间

Logstash在处理数据的时候,会自动生成一个字段@timestamp,默认该字段存储的是Logstash收到消息/事件(event)的时间。很多时候我们用ELK是处理日志的,日志里面一般都是有时间的。而且很多时候我们只关注日志里面的时间,而不关注Logstash收到这条日志的时间。这个时候,一种方法是再增加一个字段,用来存储日志里面的时间,这种很简单;另一种方法是使用日志中的时间替换掉@timestamp字段默认的时间。本文介绍第二种方法并总结一些关键知识点。现在有如下一条日志:2018-02-26 15:48:32.708-[INFO ] main RestfulApiProvider

scikit-learn的ColumnTransformer和OneHotEncoder

本文介绍scikit-learn 0.20版本中新增的sklearn.compose.ColumnTransformer和有所改动的sklearn.preprocessing.OneHotEncoder。ColumnTransformer假设现在有这样一个场景:有一个数据集,每个样本包含n个数值型(numeric)特征,m个标称型(categorical)特征,我们在使用这个数据集训练模型之前,需要对n个数值型特征做归一化,对m个标称型特征做one-hot编码?这个要如何实现?其实这个不难,但挺麻烦的。一般的方式是把数值型的特征数据列和标称型数据分别拿出来,然后分别做预处理,处理完之后再拼在一

Logistic Regression算法

在之前的《常见线性回归模型》一文中,介绍了机器学习中比较简单但又非常常用的线性回归模型,今天来介绍另外一个模型:Logistic Regression,这又是机器学习中用的非常多的一个模型。虽然Logistic Regression(后简称LR)里面带了回归字样(Regression),但它实际是一个分类模型(关于回归和分类的区别见《机器学习介绍》),更准确的说是一个二分类模型(0、1或者true、false之类,当然通过一些手段也可以实现多分类),比如预测一份邮件是不是垃圾垃圾邮件、一个人是否患了某种病等。它的基本思想是:假设一份邮件为垃圾邮件的概率为$p$,我们根据一些特征计算出这个$p

Hive的分桶和采样

Hive除了有分区(Partition),还有分桶(Bucket),上一篇文章《Hive的分区》中介绍了分区,本文接着介绍分桶,以及和分桶经常一起使用的采样(Sampling)。其实不管是分区还是分桶都是为了更好的管理数据。分区将表的数据分到不同的目录存储,从而在查询的时候可以通过where条件过滤一部分数据,减小查询的数据量从而提高性能。但分区的这种机制往往在数据符合以下条件时才会表现的比较好:分区数目为有限个:一般也不能太大,不然太多的文件和目录对于HDFS的NameNode会造成比较大的内存压力。各个分区的数据量比较均衡:这个好理解,如果90%的数据跑到一个分区去,那分区的意义就不是很大

Hive的分区

Hive提供了分区的概念,对应到后台就是不同的目录,主要是为了在查询的时候可以提高性能。而分区分为两种:静态分区(Static Partition,以下简称SP):用户指定分区列的值,数据中不包含分区列的值,所以分区与数据没有关系。举个例子比如分区名字为ds=20180922,并不代表分区内的数据都是这天的,这个需要由用户自己保证。静态分区在编译阶段确定。动态分区(Dynamic Partition,以下简称DP):分区列的值从数据中获取,所以数据列中包含分区列的值。比如数据中有一列数据为日期,如果指定该列为分区列的话,那将根据该列的值创建分区。动态分区在运行阶段才可以确定。今天就来介绍这两种

Hive架构介绍

《Hive安装使用》介绍了一下Hive的安装和数据模型,本文主要介绍Hive的架构及查询流程。架构总览先来一张官网的架构图:这幅图清楚的展示了Hive和Hadoop的关系,并且展示了Hive一些重要的组件:UI:主要是Hive的各种客户端。这是用户使用Hive的窗口,包括我们之前使用的HiveCli、Beeline等CLI,以及一些Web GUI接口。用户通过UI来提交自己的操作请求。Driver:接收用户查询,并且实现了会话处理,基于JDBC/ODBC实现了执行、拉取数据等API。Compiler:解析查询语句,做语义分析,最终借助在Metastore中查询到的表和分区的元数据生成执行计划(

Hive安装使用

Hive最初由Facebook开发,最后贡献给Apache基金会,最后成为了Apache的顶级项目。Hadoop的出现虽然解决了海量数据的存储,并且提供了MR计算框架。但MR的使用门槛还是比较高,所以Facebook便开发了Hive,底层依旧使用HDFS存储数据,但操作数据却不用自己写MR程序,而是使用类似SQL的语法操作数据(在Hive里面称为HQL),后台自动转换为MapReduce,极大的降低了用户的使用难度。一句话概括就是:Hadoop提供了海量数据的存储、计算方案,而Hive使得该方案实施起来更加方便。官方对于Hive的介绍如下:The Apache Hive™ data wareh

Python中的global和nonlocal关键字

在进入正题之前先简单说明一下:局部变量:函数或者方法里面定义的变量;全局变量:本文指module级别的变量(一个python文件就是一个module)。关于Python的作用域这里推荐一篇文章:A Beginner's Guide to Python's Namespaces, Scope Resolution, and the LEGB Rule,有兴趣的可以看一下。global先看个例子:a = 1 def func1(): print("func1:", a) def func2(): a = 10 print("func2:&q
|