绿盟实习点滴【4】

来源:互联网 发布:尤里.米尔纳 知乎 编辑:程序博客网 时间:2024/04/26 09:10

如果我是写小说的话,这算不算拖更,哈哈哈。两周不见。


Kafka

Apache kafka 是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开源系统,作为hadoop生态系统的一部分,被各种商业公司广泛应用。它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/spark流式处理引擎。

更多Kafka的相关请看大牛写的@suifeng3051–Kafka 设计与原理详解


Yarn

我就觉得这句好理解。。。

可将YARN看做一个云操作系统,它负责为应用程序启动ApplicationMaster(相当于主线程),然后再由ApplicationMaster负责数据切分、任务分配、启动和监控等工作,而由ApplicationMaster启动的各个Task(相当于子线程)仅负责自己的计算任务。当所有任务计算完成后,ApplicationMaster认为应用程序运行完成,然后退出。

这里写图片描述

更多Yarn的相关请看大牛转载的
@liuwenbo0920–Hadoop Yarn 框架原理及运作机制


Parquet

Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,目的是为了面对日益剧增的海量存储内容。

列式存储相比较于行式存储优点:

  1. 可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。
  2. 压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length
    Encoding和Delta Encoding)进一步节约存储空间。
  3. 只读取需要的列,支持向量运算,能够获取更好的扫描性能。

这里写图片描述

关系型数据的列式存储,可以将每一列的值直接排列下来,不用引入其他的概念,也不会丢失数据。关系型数据的列式存储比较好理解,而嵌套类型数据的列存储则会遇到一些麻烦。如图1所示,我们把嵌套数据类型的一行叫做一个记录(record),嵌套数据类型的特点是一个record中的column除了可以是Int, Long, String这样的原语(primitive)类型以外,还可以是List, Map, Set这样的复杂类型。在行式存储中一行的多列是连续的写在一起的,在列式存储中数据按列分开存储,例如可以只读取A.B.C这一列的数据而不去读A.E和A.B.D

更多Parquet的相关请看大牛写的@梁堰波–深入分析Parquet列式存储格式


Python碎片化记录

  • shutil.rmtree删除目录
import shutilshutil.copytree(ResDir,DesDir)#拷贝ResDir文件夹到DesDirshutil.rmtree(Dir)#删除

值得注意的是,如果DesDir存在,创建的时候会报错。

Traceback (most recent call last):  File "C:/Users/nsfocus/PycharmProjects/test/hello.py", line 1368, in <module>    shutil.copytree("des","abc")  File "C:\Program Files (x86)\Anaconda2\lib\shutil.py", line 177, in copytree    os.makedirs(dst)  File "C:\Program Files (x86)\Anaconda2\lib\os.py", line 157, in makedirs    mkdir(name, mode)WindowsError: [Error 183] : 'abc'

  • os.mkdir(dir)创建目录
import osos.mkdir("outclass")# 这样就会在工程文件下创建名为outclass的文件,使用的是相对路径,而要用绝对路径也是一样的道理,就像打开文件一样写就可以了

  • json.dump()/loads()

json.dumps : dict转成str
json.loads:str转成dict

import jsondict_ = {1:2, 3:4, "55":"66"}json_str = json.dumps(dict_)print type(json_str), json_str # <type 'str'> {"55": "66", "1": 2, "3": 4}print type(json.loads(json_str)) # <type 'dict'> {u'55': u'66', u'1': 2, u'3': 4}

  • pprint打印结构

如果你想打印结构,那么就用pprint吧。

from pprint import pprintdata = [(1,{'a':'A','b':'B','c':'C','d':'D'}),        (2,{'e':'E','f':'F','g':'G','h':'H',            'i':'I','j':'J','k':'K','l':'L'            }),]print datapprint(data)

输出的结果是:

#print效果[(1, {'a': 'A', 'c': 'C', 'b': 'B', 'd': 'D'}), (2, {'e': 'E', 'g': 'G', 'f': 'F', 'i': 'I', 'h': 'H', 'k': 'K', 'j': 'J', 'l': 'L'})]# pprint效果[(1, {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'}), (2,  {'e': 'E',   'f': 'F',   'g': 'G',   'h': 'H',   'i': 'I',   'j': 'J',   'k': 'K',   'l': 'L'})]

  • 为什么要用self

1.非继承时,self代表的是类的实例。而self.class则指向类。
2.在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例。
3.在描述符类中,self指的是描述符类的实例

# 二逼青年如我以前的写法# -*- coding: utf-8 -*-def user_init(user,name,age):  user['name'] = name  user['age'] = agedef set_user_name(user, x):  user['name'] = xdef set_user_age(user, x):  user['age'] = xdef get_user_name(user):  return user['name']def get_user_age(user):  return user['age']hasky = {}user_init(hasky,'mrlevo',23)print get_user_age(hasky),get_user_name(hasky)# mrlevo 23

使用类来做,立马pythonic

# -*- coding: utf-8 -*-class User(object):  def __init__(self,name,age):    self.name = name    self.age = age  def SetName(self,name):    self.name = name  def SetAge(self,age):    self.age = age  def GetName(self):    return self.name  def GetAge(self):    return self.agehasky = User('mrlevo',23)  # hasky实例化,传入name和ageprint hasky.GetName() # 获取GetName方法print hasky.GetAge() # 获取GetAge方法hasky.SetName('mrlevo520') # 改写nameprint hasky.GetName()# mrlevo  23  mrlevo520

其他

总结两篇

  • @MrLevo520–总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)
  • @MrLevo520–总结:Bootstrap(自助法),Bagging,Boosting(提升)

解决两篇

  • @MrLevo520–解决:xpath取出指定多标签内所有文字text
  • @MrLevo520–解决:win10_x64 xgboost
    python安装所遇到问题

接口更新

Markdown引用生成接口,现在还在更新完善中,基本满足各大网站论坛,效果如下

please enter the quote url:http://blog.csdn.net/mrlevo520/article/details/53128297[@MrLevo520--总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)](http://blog.csdn.net/mrlevo520/article/details/53128297)please enter the quote url:http://blog.csdn.net/mrlevo520/article/details/53189615[@MrLevo520--总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)](http://blog.csdn.net/mrlevo520/article/details/53128297)[@MrLevo520--总结:Bootstrap(自助法),Bagging,Boosting(提升)](http://blog.csdn.net/mrlevo520/article/details/53189615)

然后就直接复制过来,粘贴就可以了,其实很简单,你们以为我还每次写致谢的时候那么麻烦啊,还要自己贴作者和名字,我太懒了,这种重复性工作我才懒得做,现在只要直接复制url到接口里,然后它自动填充好作者和题目,生成Markdown的超链接模式,是不是很轻松,哈哈哈,请不要浪费生命在重复和无趣的工作上,虽然百分之九十的活都是这样。

目前接口库-持续更新中


总结

北京下雪了终于还是。每天走路上班有点小冷哈,空气虽然很差,奈何我有防毒面具啊。这两周很忙,非常忙,跟进的项目的算法部分我在重构模型,调试花了很多时间,所幸的是交互得到很好地提升,运行速度也是,因为把模型分开训练不同的进程中了,这样就算再多模型(一般而言,一下子不会超16个吧,额),总共训练时间也会制约在单个模型的最长时间,其实应该早就这么干了,花了不少时间在调试串行模型,尤其是组合模型上,因为组合模型的参数必须模型全部训练好之后才能添加上,这点刚开始我没想到用并行来做,因为process的join后,内存里的东西就没了,还琢磨返回值去哪了。。。。目前也不想用多线程和共享内存的方式,解决方案是Pipe和写入csv的方式(当时为了存储DataFrame格式我还卡了一下,还好有大牛提点to_csv的方法),暂且存储在硬盘里了,反正主函数需要在模型训练之后才能启动,刚好让主进程停在join那个地方再说,等参数全部写到文件里再启动,虽然有点幼稚哈,不过能够记录参数而不是全部一下子跑完都不知道输出过程心里总有点怪怪的哈。至于特征提取量化那块,看来我得好好看看NLP了,还有就是小伙伴那边算法最慢的部分就是量化,我寻思着能不能用spark来做,,,吓得我赶紧卸载了spark和hadoop。。。。


致谢

@转–python数据格式化之pprint
@转–深入理解python多进程编程
@转–Python多进程通信Queue、Pipe、Value、Array实例
@alvine008–二、PYTHON 学习笔记之multiprocessing
@专注linux–python之多进程multiprocessing
@MrLevo520–总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)
@MrLevo520–总结:Bootstrap(自助法),Bagging,Boosting(提升)
@MrLevo520–解决:xpath取出指定多标签内所有文字text
@MrLevo520–解决:win10_x64 xgboost python安装所遇到问题@suifeng3051–Kafka 设计与原理详解
@liuwenbo0920–Hadoop Yarn 框架原理及运作机制
@梁堰波–深入分析Parquet列式存储格式

0 0