PandasのDataFrameの内容をElasticsearchに日付単位のインデックスにデータ投入したいです。
DataFrameの内容をそのまま登録する方法はわかるのですが、さらにElasticSearchを日付単位に分けたインデックスにデータ投入する方法が知りたいです。
DataFrameをスライスするなどの方法を模索しましたが分からない状態です。
ElasticSearchのインデックスは'test-20200510','test-20200511','test-20200512'と出来上がっている状態で、投入できればkibanaで表示しようと考えております。
大変恐縮ですが、アドバイスいただけると助かります。
DataFrameの作成
1df = pd.DataFrame({ 2 'date' : [[10/May/2020:13:17:56 +0000], [11/May/2020:20:17:56 +0000], [11/May/2020:13:17:56 +0000], [12/Mar/2020:00:17:56 +0000]], 3 'test_seq' : [1, 2, 3, 4], 4 'test_info' : [aaa, bbb, ccc, ddd], 5 'Risk' : [normal, normal, high, normal], 6 'category' : [category_001, category_001, category_003, category_003] 7 })
python3
1from elasticsearch import helpers 2 3# Generatorを定義 4def es_doc_generator(index,df): 5 records = [d[1] for d in df.iterrows()] 6 docs_es = [{key: doc[key] for key in doc.keys()} for doc in records] 7 for doc in docs_es: 8 hashid = hash(frozenset(doc.items())) 9 yield { 10 "_index": index, 11 "_id": doc_id, 12 "_type": "_doc", 13 "_source": doc, 14 } 15 16# bulkで投入 17helpers.bulk(es,es_doc_generator("test-YYYYMMDD",df)) # ひとつのインデックスにまとめて投入
###開発環境
python 3.6.8
ElasticSarch 7系
あなたの回答
tips
プレビュー