#google-cloud-platform #google-cloud-dataflow
#google-cloud-platform #google-cloud-dataflow
Вопрос:
Я запускаю задание облачного потока данных для импорта нескольких текстовых файлов (.csv) из GCS в cloud spanner.
Задание частично выполняется, импортируется около 6 миллионов из 1 миллиарда строк, но затем задание завершается ошибкой из-за этой ошибки:
Error message from worker: java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: java.lang.RuntimeException: Error to parseRow. row: CSVRecord [comment='null', recordNumber=1, values=[source_set_id_hash, rank, run_id, source_set_id, recommended_set_id, score, updated_at, version]], table: CREATE TABLE `set_recs_similar_content` (
`source_set_id_hash` STRING(MAX) NOT NULL,
`version` STRING(MAX) NOT NULL,
`rank` INT64 NOT NULL,
`recommended_set_id` INT64 NOT NULL,
`run_id` STRING(MAX) NOT NULL,
`score` FLOAT64 NOT NULL,
`source_set_id` INT64 NOT NULL,
`updated_at` TIMESTAMP NOT NULL,
) PRIMARY KEY (`source_set_id_hash` ASC, `version` ASC, `rank` ASC)
Это потому, что он считывает первую строку CSV и ожидает, что она будет соответствовать формату?
Соответствующий раздел из моего файла manifest.json приведен ниже:
"columns": [
{"column_name": "source_set_id_hash", "type_name": "STRING"},
{"column_name": "rank", "type_name": "INT64"},
{"column_name": "run_id", "type_name": "STRING"},
{"column_name": "source_set_id", "type_name": "INT64"},
{"column_name": "recommended_set_id", "type_name": "INT64"},
{"column_name": "score", "type_name": "FLOAT64"},
{"column_name": "updated_at", "type_name": "TIMESTAMP"},
{"column_name": "version", "type_name": "STRING"}
]
Все файлы в GCS отформатированы одинаково, поэтому кажется странным, что 6% задания будет выполнено, но затем завершится неудачей.
Соответствующая ссылка на документацию: https://cloud.google.com/dataflow/docs/guides/templates/provided-batch#gcstexttocloudspanner
Спасибо
Комментарии:
1. Часть сообщения об ошибке «значения» обычно содержит значения, а не такие имена столбцов, как
values=[source_set_id_hash, rank
, поэтому я думаю, что ваша гипотеза верна. Указаны ли имена столбцов в ваших файлах?
Ответ №1:
Оказывается, заголовок не должен присутствовать в ваших CSV-файлах.
Из исходного файла шаблона:
* <p>Text file must NOT have a header.
Пожалуйста, повторите попытку после удаления заголовка из всех ваших файлов. Строка ниже из сообщения об ошибке предполагает, что первая строка была заголовком:
recordNumber=1, values=[source_set_id_hash, rank, run_id, source_set_id, recommended_set_id, score, updated_at, version]
Комментарии:
1. Спасибо, Питер, это сработало. Я не знал, является ли массив значений списком фактических значений или ссылками на столбцы. Пример файла manifest.json, приведенный в документах, также заставил меня думать, что заголовки столбцов имеют некоторую полезность.