栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

利用python将elasticsearch的数据存储至MySQL

利用python将elasticsearch的数据存储至MySQL

由于elasticsearch不存在表的概念,其查询结果返回的是json格式的数据,在将数据插入MySQL之前需要将数据解析出来。数据逻辑:读取MySQL数据->解析->存储至MySQL数据库。

创建MySQL数据库连接以及elasticsearch连接
from elasticsearch import Elasticsearch
import pandas as pd
from sqlalchemy import create_engine


##创建es连接
es = Elasticsearch(hosts = 'host:port',http_auth=('username','password'))
##创建mysql连接
con_to_mysql = create_engine("mysql+pymysql://username:password@host:port/database",encoding = 'utf-8')   

接下来就是从es中获取数据并解析数据了;

获取数据闭并解析

这里定义一个函数,实现获取数据并解析数据的功能

def get_data(index,body,scroll):     
    data = es.search(index = index,body = body,scroll = scroll)
    #获取数据标签
    scrollid = data['_scroll_id']
    #数据总量
    total_num = data['hits']['total']
    json_data = data['hits']['hits']
    for i in range(round(total_num / 10000) + 1):
        res = es.scroll(scroll_id=scrollid, scroll='5m')
        json_data += res['hits']['hits']
    
    data_dataframe = pd.Dataframe(json_data)
    detail_data = data_dataframe['_source']
    detail_Data_Dataframe = pd.Dataframe(list(detail_data))
    return detail_Data_Dataframe

因为elasticsearch无法全量查询数据,所以需要创建游标,类似于书签,每次查询10000条数据,es中返回的每条数据可能顺序不一,因此在解析的时候直接将json数据转换成dataframe。

创建主函数,将数据写入MySQL数据库
if __name__ == '__main__':
    
    body = {
  "size": 10000,
  "query": {
    "match_all": {}
  }
}
    gas_bottle = get_data('gas-bottle',body,'5m')
#    Dataframe数据框写入MySQL
    gas_bottle.to_sql('gas-bottle',con = con_to_mysql,if_exists = 'replace',index = False)
    es.close()          #关闭es连接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736388.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号