读取hive数据库,基于flask、echarts实现数据可视化
read_hive_qs.py
```python
from pyhive import hive
import pandas as pd
conn = hive.Connection(host='192.168.107.103',
port=10000,
username='root',
database='dws',
auth='NOSASL'
)
a = conn.cursor()
def month_jobtype():
a.execute('select * from month_jobtype')
b = a.fetchall()
data = {'岗位类型':[i[1] for i in b],'月份':[i[0] for i in b],'招聘人数':[i[2] for i in b]}
month_jobtype = pd.DataFrame(data)
return month_jobtype
flask_qs.py
```python
import read_hive_qs
import json
from flask import Flask, render_template
app=Flask(__name__,static_url_path='',static_folder='static')
@app.route('/')
def main():
month_jobtype= read_hive_qs.month_jobtype()
month = month_jobtype['月份'].unique().tolist()
jobtype = month_jobtype['岗位类型'].unique().tolist()
list1 = {}
for i in jobtype:
list1[i] = month_jobtype[month_jobtype['岗位类型']==i]['招聘人数'].tolist()
list1_json = json.dumps(list1)
return render_template('趋势图.html',month1 = month,jobtype = jobtype,list1_json=list1_json)
if __name__=='__main__':
app.run(debug=True)
趋势图.html
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>趋势图</title>
<script src="{{ url_for('static', filename='js/echarts.min.js') }}"></script>
</head>
<body>
<h2>不同月份的岗位类型的招聘人数变化</h2>
<div id="month_jobtype"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementsById('month_jobtype')[0]);
var x = {{ month1|tojson }}; // 使用 tojson 过滤器
var jobtypes = {{ jobtype|tojson }}; // 使用 tojson 过滤器
var list1_json = {{ list1_json|safe }}; // 这里也可以使用 tojson,但 safe 通常足够
var option = {
xAxis: {
type: 'category',
data: x
},
yAxis: {
type: 'value'
},
series: []
};
jobtypes.forEach(function(jobtype) {
var y1 = list1_json[jobtype];
option.series.push({
name: jobtype,
type: 'line',
data: y1
});
});
myChart.setOption(option);
</script>
</body>
</html>
结构
运行结果图