Я пытаюсь получить более 10 000 наблюдений от эластичного поиска и сбросить их в рамки данных панд:
es_index = "logstash-2018.08.26"
documento = "your_doc_type"
body = {"from": 0, "size": 100,
"query": {
"constant_score" : {
"filter" : {
"bool" : {
"must" : [{
"range": {"@timestamp" : {
"gte": "2018-08-26T14:00:08.000Z",
"lte": "2018-08-26T16:00:00.000Z"
}}
}],
"filter": [
{"term" :{"type" :"vx_apache_json"}},
{"term" :{"api" :"viv_signin.php"}},
{"term" :{"domain":"fnwp"}}
]
}}}}}
res = helpers.scan(
client = es,
scroll = '2s',
query = body,
index = es_index)
и когда я пытаюсь получить значение res, я получаю
<generator object scan at 0x10c89a938>
Когда я использовал приведенный ниже код.
for i in res:
print(i)
Я получаю данные в следующем формате
Я хочу преобразовать это в кадр данных pandas, как показано ниже: -
Я могу предложить вам лучший способ сделать это. Думаю, вы пытаетесь получить более 10 000 записей. Попробуйте сделать это ниже, и вы также получите миллионы записей :: -
сначала установить
from elasticsearch_dsl import Search
1.) Определите своего клиента
client = Elasticsearch(['http://localhost:9200'])
2.) search = Search(using=client)
3.) Проверить общее количество обращений
results = search.execute()
results.hits.total
4.) s = Search(using=client)
5.) запишите свой запрос
s = s.query(..write your query here...)
6.) сбрасывает данные в кадр данных с проверкой... Сканирование будет сбрасывать все данные в ваш кадр данных, даже если его в миллиардах так быть осторожным.
results_df = pd.DataFrame((d.to_dict() for d in s.scan()))
7.) Посмотрите на свой фрейм данных и улыбнитесь :)
results_df
Храните все данные в переменной и затем конвертируйте эту переменную в фрейм данных, используя pd.DataFrame(YourVariable).