前言:


机器学习平台开发初期,需要进行基于python的算法组件的开发(编写不同模型算法的python脚本,并以Azkaban调度的方式来运行模型)。

由于以前没有学过python,所以在最初的python环境搭建与数据库连接这一块,踩了不少的坑,在这里简单记录一下。(这是第一篇分享的公号,忘加原创,删了重新发的一版)

问题与方案:


  • 1.开发环境的搭建

如果你也是一个像我这样的python小白,那么你首先需要的是安装Anaconda与Pycharm

  • 2.依赖包的安装
  • 连接mysql

由于我的Python版本是3.0的,所以需要安装pymysql,如果你的Python版本是2.0的,那你可能需要安装mysqldb。

安装指令 pip install pymysql

毫无难度,demo会在文后给出。

  • 连接impala

python连接impala就要相对复杂很多了,翻遍了网上的参考,下面这篇文章最有价值:https://ask.hellobi.com/blog/ysfyb/18251

安装指令pip install sixpip install thrift_sasl==0.2.1 --no-deps(安装的时候必须完整的加上这条指令)pip install pure-saslpip install impala

在这个过程中,如果一切安装顺利,那么在运行代码的过程中,可能还会出现报错,如果是下面这个方法的地方报错,那你需要在对应的位置加上如下一行代码。

def _send_message():  header=struct.pack(">BI",status,len(body))....if(type(body) is str):        body = body.encode()

干货分享:


  • Python连接MySQL数据库demo
import pymysql  # 建立数据库连接 mysql_client = pymysql.Connect(     host='主机',     port=3306,     user='用户',     passwd='密码',     db='数据库',    charset='utf8')def gettabledata(table_name):    sscur = mysql_client.cursor(pymysql.cursors.SSCursor)    sscur.execute('select * from {}'.format(table_name))    res = sscur.fetchall()  # 获取结果    print(table_name)    print(res)    mysql_client.close()# 数据库连接和游标的关闭    sscur.close()    return restable_name='表名'gettabledata(table_name)
Python连接impala数据源demo
import geventimport timefrom impala.dbapi import connectfrom impala.util import as_pandas class MyImpala:    def __init__(self, host, port, user, password,auth_mechanism):        self.host = host         # impala主机地址        self.port = port          # impala端口        self.user = user  # impala远程连接用户名        self.password = password  # impala远程连接密码        self.auth_mechanism = auth_mechanism # impala远程连接密码        self.impala_connect()    # __init__初始化之后,执行的函数    def impala_connect(self):        self.conn = connect(host=self.host,                            port=self.port,                            user=self.user,                            password=self.password,                            auth_mechanism=self.auth_mechanism,                               )        # 连接impala后执行的函数        self.asynchronous()    def run(self, nmin, nmax):        # 创建游标        self.cur = self.conn.cursor()        # 定义sql语句,插入数据name,age,contace        sql = "insert into jy_tb.student(name,age,contace) values (%s,%s,%s)"        # 定义总插入行数为一个空列表        data_list = []        for i in range(nmin, nmax):        # 添加所有任务到总的任务列表            result = ('zhangsan' + str(i), 12, i)            data_list.append(result)        # 执行多行插入,executemany(sql语句,数据(需一个元组类型))        content = self.cur.executemany(sql, data_list)        if content:            print('成功插入第{}条数据'.format(nmax - 1))        # 提交数据,必须提交,不然数据不会保存        self.conn.commit()    def asynchronous(self):        # g_l 任务列表        # 定义了异步的函数: 这里用到了一个gevent.spawn方法        max_line = 10  # 定义每次最大插入行数(max_line=10,即一次插入10行)        g_l = [gevent.spawn(self.run, i, i+max_line) for i in range(1, 11, max_line)]        # gevent.joinall 等待所以操作都执行完毕        gevent.joinall(g_l)        self.cur.close()  # 关闭游标        self.conn.close()  # 关闭impala连接if __name__ == '__main__':    start_time = time.time()  # 计算程序开始时间    st = MyImpala('主机', 21050, 'yarn', '密码', 'PLAIN')  # 实例化类,传入必要参数    print('程序耗时{:.2f}'.format(time.time() - start_time))  # 计算程序总耗时

总结:


瓶子注定是孤独的,骚年好好撸代码吧~⛽️⛽️⛽️

建立python ln链接 python链接impala_建立python ln链接