Най-добрият начин за обединяване на тонове малки csv файлове (с различен размер на колоните) в S3

Имам тонове малки csv файлове (около 15kb всеки). Тези csv файлове имат различни заглавки. Искам да ги обединя в един csv файл с всички колони. В крайна сметка този обединен csv файл може да бъде повече от 100 GB. Когато обединявате файлове, ако колона не съществува, добавете тази колона и попълнете с null. Изтеглям тези csv файлове в EMR клъстер от s3, след това използвам код на Spark, за да обединя тези csv файлове, и също се опитах да използвам код на python, за да ги обединя. От експериментите, които направих, кодът на Python работи по-добре от Spark, но не и идея. Някой има ли по-добри идеи? Благодаря.


person Hehe    schedule 06.06.2018    source източник


Отговори (1)


Не съм сигурен дали все още търсите това.

Можете да посочите местоположението на файловете, от които искате да четете, и да използвате 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 за същото, но се надявам да ви помогне.

person Sai Kumar    schedule 09.07.2018