我正在尝试根据来自S3的LastModifiedDate获取文件集合
List <String> FileNames = new ArrayList<String>();
ListObjectsRequest listObjectsRequest = new ListObjectsRequest() .withBucketName(s3_bucket) .withPrefix(logs_dir);
ObjectListing objectListing;
do {
objectListing = s3Client.listObjects(listObjectsRequest);
for (S3ObjectSummary objectSummary :
objectListing.getObjectSummaries()) {
if ((objectSummary.getLastModified().compareTo(dayBefore) > 0) && (objectSummary.getLastModified().compareTo(dayAfter) <1) && objectSummary.getKey().contains(".log"))
FileNames.add(objectSummary.getKey());
}
listObjectsRequest.setMarker(objectListing.getNextMarker());
} while (objectListing.isTruncated());
我想使用Spark
处理这些文件我知道sc.textFile在spark中读取单个文本文件。但在我的情况下,List包含我想要阅读的所有文件的路径。有没有办法读取属于List的所有这些文件?
感谢您的帮助。
答案 0 :(得分:0)
一个简单的选择是使用sc.textfile映射文件名列表,然后将生成的RDD联合起来。
答案 1 :(得分:0)
我能够构建一个列表,然后从中创建一个concat字符串,然后将其用作textfile的一部分
String concatName= "";
for(String fName : FileNames) {
if(FileNames.indexOf(fName) == (FileNames.size() -1)) {
concatName+= "s3n://" + s3_bucket + "/" + fName;
} else {
concatName+= "s3n://" + s3_bucket + "/" + fName + ",";
}
}