Запишите 1 миллион строк CSV в S3 партиями - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь создать очень большой файл CSV на S3.

  • Я хочу собрать этот файл на S3
  • Я хочу добавить строки к этому файлу в пакетном режиме.
  • Количество строк может быть от 10 до 1М
  • Размер каждой партии может быть <5 МБ (поэтому загрузка нескольких частей невозможна) </li>

Каков был бы правильный способ сделать что-то подобное?

Ответы [ 3 ]

1 голос
/ 19 марта 2019

«Один большой файл» не будет работать для вас - вы не можете добавлять строки в файл s3, не загрузив сначала весь файл, не добавив строки, а затем загрузив новый файл поверх старого - для небольших файлов это будет работать, но по мере увеличения размера файла пропускная способность и обработка будут увеличиваться в геометрической прогрессии и могут стать очень медленными и, возможно, дорогими.

Лучше отказаться от рефакторинга вашего дизайна, чтобы работать с большим количеством маленьких файлов вместо одного большого.

1 голос
/ 19 марта 2019

Традиционно при обработке больших данных («озера данных») информация, относящаяся к одной таблице, хранится в каталоге , а не в одном файле .Таким образом, добавить информацию в таблицу так же просто, как добавить другой файл в каталог.Все файлы в каталоге должны быть одной и той же схемы (например, столбцы CSV или данные JSON).

Каталог файлов можно затем использовать с такими инструментами, как:

  • Spark, Hive и Presto на Hadoop
  • Amazon Athena
  • Amazon Redshift Spectrum

Преимущество этого метода заключается в том, что вышеуказанные системы могут обрабатывать несколькофайлы параллельно вместо того, чтобы ограничиваться обработкой одного файла однопоточным методом.

Также обычно сжимает файлы с использованием таких технологий, как gzip .Это снижает требования к хранилищу и ускоряет чтение данных с диска.Добавить дополнительные файлы легко (просто добавьте еще один csv.gz файл) вместо того, чтобы распаковать, добавить и повторно сжать файл.

Итог: Было бы целесообразно повторноПодумайте о своих требованиях к «одному большому файлу CSV».

0 голосов
/ 02 мая 2019

Оставьте объект мусора объемом 5 МБ на S3 и выполните с ним конкатенацию, где часть 1 = объект мусора 5 МБ, часть 2 = файл, который вы хотите загрузить и объединить. Продолжайте повторять это для каждого фрагмента и, наконец, используйте копию диапазона, чтобы убрать 5 МБ мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...