【问题标题】:Best way to merge tons of small csv files (different column size) in S3在 S3 中合并大量小 csv 文件(不同列大小)的最佳方法
【发布时间】:2018-11-16 10:45:46
【问题描述】:
我有大量的小 csv 文件(每个大约 15kb)。这些 csv 文件有不同的标题。我想将它们合并到一个包含所有列的 csv 文件中。最终,这个合并的 csv 文件可能超过 100GB。合并文件时,如果某列不存在,则添加该列并填空。我从 s3 下载这些 csv 文件到 EMR 集群,然后使用 Spark 代码合并这些 csv 文件,还尝试使用 python 代码合并它们。从我所做的实验来看,Python 代码比 Spark 运行得更好,但并不理想。有没有人有更好的想法?谢谢。
【问题讨论】:
标签:
python
csv
apache-spark
amazon-s3
【解决方案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 的实现是否相同,但我希望它对您有所帮助。