一、分布式数据挖掘必要的基础知识准备

2019-02-08  本文已影响8人  梦捷者

1、基础的第三方库

1.1 urllib2      1.2 pyspark  1.3 protobuf    1.4mongodb    1.5mysql

注意:1、protobuf工具就是一个把协议进行打包,把协议变成一个序列化数据(stub-桩代码),通过tcp、http把打好包的数据传到目标对象。    2、序列化数据可以用在用两种不同的语言写出来的系统之间进行通信(比如:python和java写的两种系统之间)    3、序列化就是对协议进行打包。

2、开发环境

2.1 Pycharm IDE

主流的python集成环境

2.2  依赖项和包管理工具

2.2.1 Anaconda (https://www.anaconda.com/download/#macos)

进入pycharm 环境,File->setting->Project: xxxx->设置->新建local->选择anaconda对应的python 解释器

  切记选择inherit global site-packages 选项


完成以后可以找到anaconda 自带的package

2.2.2 pip

Pypi 托管的源,可以使用sudo pip install xxx 命令安装软件(cython、pypi、jython 是什么?)

1、cython

1.1 cython简介

python作为一门强大的脚本语言,优势自然不必说。但是,当我们的模型较复杂,运算量较大的时候,python的短板就会出现,就是运算速度慢。当然,解决这一问题有很多方法,比如pypy的jit技术,但是抛开稳定性不提,使用pypy有很多限制,而且不是那么工程化。所以,向大家介绍Cython,方便将别的应用场景中的一些重计算的部分单独取出来,然后用Cython改写,独立成模块来提高运算速度。

    首先,大家都知道,C语言是编译性语言,而Python则是解释性语言,简而言之,就是Python运行是逐行运行,不需要实现编译,而C需要在运行前编译。那么,可想而知,如果运行前,需要事先编译,那么其实有一种“上帝视角”的感觉,自然可以做很多优化,让代码运行的更快。而Cython的出现就是这个目的,让Python也可以被编译,然后执行。Cython是一种部分包含和改变C语言,以及完全包含pyhton语言的一个语言集合。Cython是用Python实现的一种语言,可以用来写Python扩展,用它写出来的库都可以通过import来载入,性能上比Python的快。Cython里可以载入Python扩展(比如 import math),也可以载入C的库的头文件(比如:cdef extern from “math.h”),另外也可以用它来写Python代码。将关键部分重写成C扩展模块。Cython中的强大之处在于可以把Python和C结合起来,它使得看起来像Python语言的Cython代码有着和C相似的运行速度。

1.2、cython的helloworld

首先我们要知道,cython的文件后缀是.cyx,而且既然cython是python语言的一个超集,那么,cyx里面运行纯python文件也是没有问题的了。pyx文件只是Cython源代码文件,要想被python调用运行,还要转成c\c++的文件,再进一步转成.pyd文件(window系统)或者.so文件(Linux系统)。.pyd和.so文件才是可以直接在python文件中import使用的文件。

  编译经过两个阶段:

* Cython编译.pyx文件为.c文件;

* C编译器会把.c文件编译成.so文件(Linux系统)或者.pyd文件(Windows系统);

我们新建一个hello.pyx文件,在里面输入:

def hello():

    print ("Hello World")

  没有任何特殊,然后我们新建一个setup.py脚本,这个python文件的目的就是使用cython编译器去编译pyx折一个cython文件。setup.py文件的代码很简单:

from distutils.core import setup

from Cython.Build import cythonize

setup(

    ext_modules=cythonize("hello.pyx")

)

    然后我们运行一下setup.py文件:

python setup.py build_ext --inplace. build_est

    大概就是编译extension文件的意思,inplace则是放到源代码pyx旁边,也就是同一目录下的意思。然后,我们就可以看到多了两个文件,一个是hello.c一个是hello.so(Linux系统)或者hello.pyd(windows系统)。这里,c文件就是cython将我们的pyx文件解析成一个c文件件,不依赖与平台,而后面的so或者pyd文件,则是将c文件进行编译后的一个文件,依赖于平台。这个时候,so文件或者pyd文件就可以像普通的python文件一样,被import。

2、jython

2.1 jython简介

Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。

2.2.3 Virtualenv

virtualenv 是一个创建隔绝的Python 环境的工具。virtualenv 创建一个包含所有必要的可执行文件的文件夹,用来使用Python 工程所需的包。大项目时强烈推荐使用虚拟环境避免由于依赖的package 版本冲突带来的问题。

新建一个空的项目:

1、选择Virtualenv 环境

2、不要勾选inherit global site-packages


发现只有原生的几个package

3、工程规约

3.1 开发环境

研发工程师在本机搭建的环境,用于代码编写。环境包括项目需要对应版本的第三方包;

功能开发完成以后需自行编写单元测试用于纠错。

3.2 测试环境

测试人员对代码进行全流程测试,工作主要是编写自动化测试脚本,从系统层面检查功能是否正常、系统性能、代码覆盖等指标;可以通过Jenkins 等CI 工具触发自动化检测流程,通过检测以后可以部署到测试环境;

3.3 生产环境

公司对外提供服务的环境,包括软硬件等系统;

3.4版本控制

推荐使用Git 实现文本版本控制,团队协同开发可以使用github 的私有仓库或者gitlab 自行搭建;

4、来自Google 的序列化框架Protobuf

安装protobuf 编译器:

                                conda install protobuf=3.6.0

网络协议:

利用pb 编译器自动生成代码:

                                protoc --python_out=. person.proto

注意:1、Anaconda是一个ide,python解释器,包管理项,在它下面的包管理工具是conda.    2、github是提供储存的一个环境,而git是一个库。

上一篇下一篇

猜你喜欢

热点阅读