我想指數一堆大大熊貓dataframes(約400萬行和50列)到Elasticsearch。指數一大熊貓據幀到Elasticsearch沒有elasticsearch-PY
在尋找如何做到這一點的例子,大多數人都會用elasticsearch-py's bulk helper method,通過它的一個實例of the Elasticsearch class它處理的連接以及其上創建with pandas' dataframe.to_dict(orient='records') method詞典列表。元數據可以預先作爲新列插入到數據幀中,例如, df['_index'] = 'my_index'
等
但是,我有理由不使用elasticsearch-py庫,並希望直接與Elasticsearch bulk API交談,例如,通過requests或其他方便的HTTP庫。此外,df.to_dict()
是大dataframes,可惜很慢,一個數據幀轉換爲類型的字典列表,然後通過elasticsearch-PY序列化JSON聽起來像是不必要的開銷時,有類似dataframe.to_json()的速度非常快,即使在大dataframes。
什麼會得到一個數據框大熊貓成大宗原料藥所需要的格式的方便,快捷的方法呢?我認爲,在正確的方向邁出的一步如下使用dataframe.to_json()
:
import pandas as pd
df = pd.DataFrame.from_records([{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}])
df
a b
0 1 2
1 3 4
2 5 6
df.to_json(orient='records', lines=True)
'{"a":1,"b":2}\n{"a":3,"b":4}\n{"a":5,"b":6}'
現在這是一個新行分隔的JSON字符串,但是,它仍然缺乏的元數據。什麼是表演方式讓它在那裏?
編輯: 爲了完整性,元數據JSON文件將看起來像:
{"index": {"_index": "my_index", "_type": "my_type"}}
因此,在端部通過本體API預期整個JSON看起來像 這(與另外的最後行之後換行符):
{"index": {"_index": "my_index", "_type": "my_type"}}
{"a":1,"b":2}
{"index": {"_index": "my_index", "_type": "my_type"}}
{"a":3,"b":4}
{"index": {"_index": "my_index", "_type": "my_type"}}
{"a":5,"b":6}
您可以發佈一個預期的元數據爲您的樣品DF? – MaxU
當然,請看我的編輯。 – Dirk
我不明白格式(結構) - 它不是一個有效的JSON。您是否可以嘗試使用其批量API將此小型「JSON」加載到ElasticSearch中進行一些小測試? – MaxU