从S3存储桶中读取大量CSV文件

时间:2020-09-08 23:16:42

标签: python csv amazon-s3 pyspark apache-spark-sql

我想从S3存储桶中读取大量的csv文件。 CSV文件位于不同的分区中。我正在使用Boto3列出csv的所有路径。然后使用for循环遍历列表,将csv文件读入spark数据帧。我需要一种更好的优化方法来从S3路径读取大量文件,因为循环是一种线性方法,需要大量时间才能完成。 列出所有对象:

self.all_objects = [file_path['Key'] for resp_content in self.s3.get_paginator("list_objects_v2").paginate(Bucket='bucketName') for file_path in resp_content['Contents']]

循环读取每个CSV文件:

csv_df = self.spark.read.format("csv").option("header", "true").load(s3_path)

我还想将所有数据框合并在一起以创建一个实木复合地板文件。

如果有人对它有很好的解决方案,请在此先感谢。

1 个答案:

答案 0 :(得分:0)

读取包含许多文件夹(Spark + Scala)的csv文件:

public class CustomAggregationStrategy extends AbstractListAggregationStrategy<Exchange> {

    @Override
    public void onCompletion(Exchange exchange) {
        if (exchange != null && isStoreAsBodyOnCompletion()) {
            List list = (List) exchange.removeProperty(Exchange.GROUPED_EXCHANGE);
            if (list != null) {
                exchange.getIn().setBody(list);
            }
        }
    }

    @Override
    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        if (oldExchange == null) {
            oldExchange = new DefaultExchange(newExchange);
        }
        return super.aggregate(oldExchange, newExchange);
    }

    @Override
    public Exchange getValue(Exchange exchange) {
        return exchange;
    }

}