Я пытаюсь прочитать и записать его в BigQuery с облачным потоком данных (Beam Python SDK).На чтение и запись 20 миллионов записей (~ 80 МБ) уходит почти 30 минут.
Глядя на DAG потока данных, я вижу, что преобразование каждой строки CSV в строку BQ занимает большую часть времени.
Ниже приведен фрагмент кода для того же:))
def parse_record_string(self, string_input,schema_dict):
for idx,(x,key) in enumerate(zip(imm_input,schema_dict)):
key = key.strip()
datatype = schema_dict[key].strip()
if key == 'HASH_ID' and datatype != 'STRING':
hash_id = hash(''.join(imm_input[1:idx]))
row_dict[key] = hash_id
else:
if x:
x = x.decode('utf-8').strip()
row_dict[key] = x
else:
row_dict[key] = None
#row_dict[key] = ''
return row_dict
Помимо преобразования карты, я также использовал ParDo и Flatmap.Все они дают одинаковый результат.Пожалуйста, предложите любую возможную настройку, чтобы сократить время.
Заранее спасибо