С помощью метода parallel_bulk
вы можете передать список диктов или генератор, который выдает диктат. Объяснение здесь . generator
в python служит для того, чтобы не загружать в ОЗУ переменную, но если вы должны передать ваш elem
в списке раньше - dict action
в списке actions
, он больше не имеет смысла, потому что строить список вы должны загрузить в память все элементы внутри него. В вашем случае вы передаете генератор, который выдает не dict elem - action
- но он выдает список операций - actions
.
Итак, или ваша функция _gen_data возвращает список, действительно, генератора:
def _gen_data(self, index, doc_type, chunk_size):
sql = """select * from tem_search_engine_1 where rownum <= 10000"""
self.cursor.execute(sql)
col_name_list = [col[0].lower() for col in self.cursor.description]
col_name_len = len(col_name_list)
actions = []
start = time.time()
for row in self.cursor:
source = {}
tbl_id = ""
for i in range(col_name_len):
source.update({col_name_list[i]: str(row[i])})
if col_name_list[i] == "tbl_id":
tbl_id = row[i]
action = {
"_index": index,
"_type": doc_type,
"_id": tbl_id,
"_source": source
}
actions.append(action)
return actions
Или вы не создаете список actions
и выдает dict action
:
def _gen_data(self, index, doc_type, chunk_size):
sql = """select * from tem_search_engine_1 where rownum <= 10000"""
self.cursor.execute(sql)
col_name_list = [col[0].lower() for col in self.cursor.description]
col_name_len = len(col_name_list)
start = time.time()
for row in self.cursor:
source = {}
tbl_id = ""
for i in range(col_name_len):
source.update({col_name_list[i]: str(row[i])})
if col_name_list[i] == "tbl_id":
tbl_id = row[i]
yield {
"_index": index,
"_type": doc_type,
"_id": tbl_id,
"_source": source
}
Как насчет записи
var people = repository.Find<Employee>();
Это сохраняет тот же объем ввода, но по-другому.
Как я мог назвать метод Находки без specififying U?
К сожалению, разрешение перегрузки общего метода C# не соответствует на основе возвращаемых значений.
Посмотрите сообщение в блоге Eric Lippert об этом: Вывод типа Возврата C# 3.0 Не Работает Над Группами Метода
Но один простой способ записать это использует var
ключевое слово.
var employees = repository.Find<Employee>();