在S3中合并大量小型csv文件(不同列大小)的最佳方法

时间:2018-06-06 16:49:09

标签: python csv apache-spark amazon-s3

我有大量的小型csv文件(每个约15kb)。这些csv文件具有不同的标头。我想将它们合并到一个包含所有列的csv文件中。最终,这个合并的csv文件可能超过100GB。合并文件时,如果列不存在,则添加此列并填入null。我从s3下载这些csv文件到EMR集群,然后使用Spark代码合并这些csv文件,并尝试使用python代码合并它们。从我做过的实验来看,Python代码比Spark更好但不是想法。有没有人有更好的想法?感谢。

1 个答案:

答案 0 :(得分:0)

不确定您是否还在寻找它。

您可以提供要读取的文件的位置,并使用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的实现是否相同,但希望它能对您有所帮助。