如何从ElasticSearch helpers.scan结果获取Python Dataframe

时间:2017-07-12 09:34:14

标签: python elasticsearch dataframe

假设我有一个辅助函数,如:

result_helper = helpers.scan(es, scroll='2m', query={"query": {"match_all": {}}} ,index="test", size=1000, _source=('logtime','host_name', 'kv', 'value') )

如何将这些数据导入python数据帧?

采用这种方法:

result_helper = list(helpers.scan(es, scroll='2m', query={"query": {"match_all": {}}} ,index="test", size=1000, _source=('logtime','host_name', 'kv', 'value') )) 
df = pd.DataFrame(result_helper)

我获得了一个数据框,但在_source列中有一个列表:

_id                         _index       _score     _source               _type     sort
0   AVz3qBfbLK0jC-lSNFjT    test         None       {u'host_name': u'hostxyz', u'kv': u'Memory_an...    logs    [0]

如何从helpers.scan结果创建一个数据框,并为_source列表中的每个键添加一列? E.g:

    hostname memory  ...
 1  hostxyz  1024GB  ...
 2      .       .        
 3      .       .
 4      .       .

1 个答案:

答案 0 :(得分:0)

经过一些考虑和测试后,我开发了以下解决方案:

使用

result_helper_list = list(helpers.scan(es, scroll='2m', query={"query": {"match_all": {}}} ,index="check_mk_wnp_csh", size=1000, _source=('logtime','host_name', 'kv', 'value') ))

df_result = json_normalize(result_helper_list)

我将列表作为列(根据需要):

df_result.columns

>     Index([u'_id', u'_index', u'_score', u'_source.host_name', u'_source.kv',
            u'_source.logtime', u'_source.value', u'_type', u'sort'],
           dtype='object')