Я в основном пытаюсь проиндексировать данные из кадра данных, поступающего из файла CSV.
Я успешно создал индексы.
es.indices.create(index='hash_test', ignore=400)
И добавил базовые индексы со столбцами и образцами данных, содержащимися в моем фрейме данных
es.index(index="hash_test", doc_type="hash-test", id=rand_id, body={
'FILENAME': '6.js',
'HASH': 'b4d44ed618112e41cb7e8f33bb19a414',
'DATE': '2018-11-15'})
Что работало нормально.
Ниже показано, как я хочу проанализировать мой фрейм данных в нужный формат, выполнить итерацию по строкам и проиндексировать данные в Elasticsearch, как описано выше.
def index_data(data_path, chunksize, index_name, doc_type):
f = open(data_path)
csvfile = pd.read_csv(f, iterator=True, chunksize=chunksize,sep="£",encoding="utf-8-sig",index_col=0,engine="python")
dictionary = {'Â':''}
es = Elasticsearch('http://*.*.*.*:9200/')
for i,df in enumerate(csvfile):
rand_id = uuid.uuid4();
df.replace(dictionary, regex=True, inplace=True)
df.columns = df.columns.str.replace('Â', '')
records=df.where(pd.notnull(df),None).T.to_dict()
list_records=[records[it] for it in records]
json_data = str(''.join(str(v) for v in list_records))
try:
es.index(index_name, doc_type, rand_id, json_data)
except:
print("error!")
pass
Мне пришлось провести некоторый анализ кадра данных, так как странный символ был в каждой строке и столбце (Â).
Когда я печатаю значения Iхочу индексировать
print(index_name, doc_type, rand_id, json_data)
Я получаю именно то, что хочу
hash_test hash-test 51eacee2-e2b1-4886-82f5-1373ec59c640 {'FILENAME': '6.js', 'HASH': 'b4d44ed618112e41cb7e8f33bb19a414', 'DATE': '2018-11-15'}
Однако при запуске я получаю следующую ошибку:
RequestError: RequestError(400, 'mapper_parsing_exception', 'failed to parse')
Что пытаетсяПОСТАВИТЬ следующие данные:
{"_index":"hash_test","_type":"hash-test","_id":"{'FILENAME': '8.js', 'HASH': 'b4d44ed618112e41cb7e8f33bb19a414', 'DATE': '2018-11-15'}","found":false}
Полностью игнорирует параметр rand_id, а когда я делаю следующее:
es.index(index_name, doc_type, json_data, rand_id)
Игнорируется параметр json_data .....
{"_index":"hash_test","_type":"hash-test","_id":"93eadd1b-6859-474b-9750-b618b800b4d5","found":false}
Я не понимаю различий в выводе, который я получаю, и я озадачен тем, как тело оказывается в поле _id, когда я указал параметр id.
Заранее благодарим за любую помощь.