hmlhmz
December 23, 2018, 6:27pm
1
添付のようなcsvをjson形式に変換してElasticsearchにアップロードしたいと思っています。A列に日時、B~C列にサーバ名があり、時間毎の値(ここでは例としてCPU使用率)が記載されています。
以下のようなコードでindexを作成し、作成後、mapping情報を変更しようとしたところエラーが出ます。原因と対処法を教えていただけませんでしょうか?
import csv
import json
import pandas as pd
from datetime import datetime as dt
import elasticsearch
from elasticsearch import helpers
csvfile = "sample.csv"
df_csv = pd.read_csv(csvfile, encoding = "SHIFT-JIS")
json_str = df_csv.to_json(orient = 'records')
json_objs = json.loads(json_str)
url = "http://localhost:9200 "
es = elasticsearch.Elasticsearch(url)
index作成
for json_obj in json_objs:
mybody = json_obj
es.index(index = myindex, doc_type = "collected_data", body = mybody)
上記はエラーは出ずに正常に処理されます。(Elasticsearchへ登録されたデータがkibana側で確認できる)
しかし、以下を実行すると、下記「■エラーメッセージ」のようなメッセージが出てしまいます。やりたい事はpythonのコードから日時(DateTime)をDate情報として認識させたい事です。今文字列としてkibanaが認識してしまってます。
mapping = {
"properties": {
"DateTime": {
"type": "date",
"format":"yyyy-MM-dd HH:mm:ss"
}
}
}
es.indices.put_mapping(index = myindex, doc_type = "collected_data", body = mapping)
■エラーメッセージ
RequestError: RequestError(400, 'mapper_parsing_exception', 'Root mapping definition has unsupported parameters:
[mapping : {collected_data={properties={DateTime={type=date, format=yyyy-MM-dd HH:mm:ss}}}}]')
tsgkdt
(tsgkdt)
December 23, 2018, 11:13pm
2
こんにちわ
手元の環境(Es6.5.4)では、状況が再現しないため
今回は、マッピングが作成できない、ということですので、問題の切り分けのためにも、
データ投入をせずに、indexの作成とマッピングの作成だけをやってみてはいかがでしょう?
具体的にいうと、データ投入によってindexとmappingを暗黙的に作成するのではなく、
明示的にcreateとput_mappingしてみてはどうでしょうか。
手元の環境では以下でマッピングが期待通り作成されています。
# マッピング定義
mapping = {
"properties": {
"DateAndTime": {
"type": "date",
"format":"yyyy-MM-dd HH:mm:ss"
}
}
}
myindex = 'forum1224'
# indexの作成
es.indices.create(index=myindex)
# マッピングの作成
es.indices.put_mapping(index=myindex, doc_type='collected_data', body=mapping)
期待通りにmappingが作成できてから、実際にデータを入れる(es.index(..))していく方が良いと思います。
mappingの定義自体が正しいかを確認するのであれば、KibanaのDevToolsも使えます。
PUT forum1224
PUT forum1224/_mapping/collected_data
{
"properties": {
"DateAndTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}
最後に、お使いのElasticsearchやelasticsearch-pyのバージョンなど添えていただければ、他の方の回答をしやすいかと思います。
よろしくお願いします。
hmlhmz
December 24, 2018, 1:58am
3
早々のお返事ありがとうございました。
お陰様で無事データの投入ができました。
先にindexやmappingを定義してしまえば良かったんですね。
Elasticsearchのバージョンや環境の記載が無く、失礼いたしました。
こちらの環境は以下です。
・elasticsearch 6.5.3
・kibana 6.5.3
・Windows 10
・Python 3.6.5(Anaconda)
tsgkdt
(tsgkdt)
December 24, 2018, 1:13pm
4
参考までにですが、6.5.4ではKibanaとbeatsで「a couple of notable issues」とされる修正が入ってますので、
検証環境かもしれませんが、最新をお使いいただくと良いように思います。
躓いたところが既知の不具合だったりすると、時間がもったいないですしね。
hmlhmz
December 24, 2018, 11:02pm
5
tsgkdtさん
ご返信ありがとうございます。
追加の情報、ありがとうございます。
後日教えて頂いたバージョンへ移行しようと思います。
system
(system)
Closed
January 21, 2019, 11:02pm
6
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.