본문 바로가기

소프트웨어-이야기/데이터 저장소 + 시각화

[Spark] S3에 파일이 존재하는지 확인하기

Zeppelin 노트북에서 데이터소스를 불러올 때, AWS S3에 올려둔 파일들을 가져다가 사용한다.

그런데 만약 없는 파일을 읽어들이려고 하는 경우, 에러가 발생한다.

만약 일자별로 쌓인 로그 파일을 한번에 가져와서 읽을 필요성이 있다고 생각해보자.


val fileList = MutableList("s3n://jimin-bucket/folder1/20170202/*", "s3n://jimin-bucket/folder1/20170203/*", "s3n://jimin-bucket/folder1/20160204/*") spark.read.json(fileList:_*)


만약 20170203 폴더에 file1이 없는 경우, 파일을 읽어들일 수 없어 에러가 난다.

이런 경우, fileList 변수에는 실제로 존재하는 폴더명들로 존재해야만 한다.


------------------------------------------------------------------------------------------------------------------


파일이 실제로 존재하는지 확인하려면 아래와 같은 명령문으로 확인할 수 있다.


import java.net.URI
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path

FileSystem.get(new URI("s3n://bucket"), sc.hadoopConfiguration)
       .exists(new Path("s3n://jimin-bucket/folder1/20170203"))

참고 링크 : http://bigdatatech.taleia.software/2015/12/21/check-if-exists-a-amazon-s3-path-from-apache-spark/


* 파일이 존재하면 true, 없으면 false를 리턴한다.

* 파일 경로를 명확하게 지정해야한다. 

   "s3n://jimin-bucket/folder1/20170203/*" 이런식으로 폴더 하위에 어떤 파일들이 있는지 조회해보고 싶었는데, 이런식으로는 사용할 수 없었다. 



< 끝 >