2017-04-04 44 views
0

試圖讀取從Java火花上下文中的S3數據:閱讀文件與子目錄沿着從S3使用sc.textFile

"mapreduce.input.fileinputformat.input.dir.recursive", "true" 
jsc.textFile(filePath); 

它是爲我工作時,我只有內部的文件夾小時:

s3://<year>/<month>/<day>/<hour>/<files> 
jsc.textFile("s3://<year>/<month>/<day>"); 

現在,在平行小時的文件夾S3我們可能有new_folder以及

s3://<year>/<month>/<day>/<hour>/<files> 
s3://<year>/<month>/<day>/<hour>/<new_folder>/<files> 

下面的代碼忽略文件下new_folder小號

jsc.textFile("s3://<year>/<month>/<day>"); 

試圖用多個正則表達式,但我的方法 「isPathExist」 總是使用以下方法返回false

jsc.textFile("s3n://<year>/<month>/<day>/*/<regular_expression>"); 

經過S3路徑,其中返回false

private static boolean isPathExists(String folderPath, String bucket, String accessKey, String secret) { 
    AWSCredentials cred = new BasicAWSCredentials(accessKey, secret); 
    AmazonS3 s3 = new AmazonS3Client(cred); 
    ObjectListing objectListing = s3 
      .listObjects(new ListObjectsRequest().withBucketName(bucket).withPrefix(folderPath)); 
    return !objectListing.getObjectSummaries().isEmpty(); 
} 
+0

什麼是你所得到的輸出?你有什麼異常?請提供更多詳細信息 – RBanerjee

+0

*嘗試使用多個正則表達式* ...該方法不接受正則表達式,而且這些方法甚至不包含正則表達式 –

回答

0

如果你想要所有的子目錄,然後使用兩顆星。

jsc.textFile("s3://<year>/<month>/<day>/**"); 

和文件在這些目錄中,多了一個明星(我認爲)

jsc.textFile("s3://<year>/<month>/<day>/**/*");