从S3读取多个文件并使用Apache Spark进行处理

时间:2015-05-20 20:25:55

标签: amazon-s3 apache-spark multiple-files

我正在尝试根据来自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的所有这些文件?

感谢您的帮助。

2 个答案:

答案 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 + ",";
       }
    }