前言:
机器学习平台开发初期,需要进行基于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)) # 计算程序总耗时
总结:
瓶子注定是孤独的,骚年好好撸代码吧~⛽️⛽️⛽️