【问题标题】: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 的实现是否相同,但我希望它对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多