Лучший способ объединить тонны небольших CSV-файлов (другой размер столбца) в S3 - PullRequest
0 голосов
/ 06 июня 2018

У меня есть тонны маленьких CSV-файлов (около 15 КБ каждый).Эти CSV-файлы имеют разные заголовки.Я хочу объединить их в один CSV-файл со всеми столбцами.В конечном итоге этот объединенный CSV-файл может иметь размер более 100 ГБ.При объединении файлов, если столбец не существует, добавьте этот столбец и заполните его нулем.Я загружаю эти CSV-файлы в кластер EMR из s3, затем использую код Spark для объединения этих CSV-файлов, а также пытался использовать код Python для их объединения.Из проведенных экспериментов, код Python работает лучше, чем Spark, но не идея.У кого-нибудь есть идеи получше?Спасибо.

1 Ответ

0 голосов
/ 09 июля 2018

Не уверен, если вы все еще ищете это.

Вы можете указать местоположение файлов, из которых вы хотите читать, и использовать Spark-java (если это то, с чем вы знакомы?) И сгенерировать его.большой файл

JavaRDD<YourObjectStructureInPOJO> objectRDD = sparkSession.read().format("csv").option("header", true).option("sep","YOUR_CSV_DELIMITER").option("mode", "FAILFAST")
        .schema(getStructureTypes()).load(YOUR_PATH_TO_READ_FROM).javaRDD().map(new YourCustomFunctionToReadIntoObjects());
Dataset<Row> yourDataFrame= sparkSession.createDataFrame(objectRDD, YourObjectStructureInPOJO.class);

Как только вы прочитаете все, вы можете записать в один файл CSV

yourDataFrame.coalesce(1).write().mode(SaveMode.Overwrite).option("header", true).option("sep", "YOUR_CSV_DELIMITER").csv(YOUR_S3_PATH_TO_SAVE);

Я не уверен насчет реализации Python для того же, но я надеюсь, что это поможет вам,

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