我想从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)
我还想将所有数据框合并在一起以创建一个实木复合地板文件。
如果有人对它有很好的解决方案,请在此先感谢。
答案 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;
}
}