제플린 노트북에서 데이터 소스를 가져올 때, DataFrameReader Class를 주로 사용한다.
아래의 코드 처럼, DataFrameReader의 함수들을 사용해서 구조화되어있는 파일을 읽어들이면 DataFrame을 리턴된다.
spark.read.json("s3n://jimin-bucket/a/*") spark.read.parquet("s3n://jimin-bucket/a/*")
그런데 파일을 하나하나 가져오기 보다는 여러 파일리스트를 한번에 가져오고 싶을 때가 있다.
이때는 MutableList에 파일 목록들을 담아서, 이를 매개변수로 보내주면 된다.
-------------------------------------------------------------------------------------------------------------------
처음에 한번에 데이터소스를 가져오는 방법을 찾기 위해 Apache Spark API 문서 페이지에서 DataFrameReader 클래스의 json 함수의 매개변수들을 훑어보았다.
경로 : http://spark.apache.org/docs/latest/api/scala/#org.apache.spark.sql.DataFrameReader
위에서 세번째 함수인, json(paths: String*)을 통해
파일 경로들을 가변 변수로 넘겨주면, 한 번에 여러개의 파일들을 읽어들일 수 있단걸 알게되었다.
spark.read.json("s3n://jimin-bucket/a/*","s3n://jimin-bucket/b/*")
-------------------------------------------------------------------------------------------------------------------
그러면 가변변수들을 이렇게 하나하나 지정해주는게 아니라, List에 파일 경로들을 담아서 한번에 가져올 수 있는 방법이 없나 찾아보았다.
그래서 스택오버플로우에서 List를 매개변수로 넘길 때, 가변인자로 확장시키는 방법을 찾아냈다.
링크 : http://stackoverflow.com/questions/5495428/scala-how-to-pass-an-expanded-list-as-varargs-into-a-method
-------------------------------------------------------------------------------------------------------------------
처음에는 아래처럼 그냥 List 혹은 Array에 파일 경로들을 담아서, 데이터소스를 가져오려고 했다.
var fileLlist:List[String] =List() fileList = fileList :+ "s3n://jimin-bucket/a/*" fileList = fileList :+ "s3n://jimin-bucket/b/*" spark.read.json(fileList: _*)
그런데 이렇게 대입하고 fileList 값을 읽어보니, 텅텅비어있었다.
내가 겪은 기묘한 상황은 아래의 스택오버플로우 질문사항과 같았다.
( 링크 : http://stackoverflow.com/questions/19610320/add-element-to-a-list-in-scala )
이런 경우, mutable list를 사용해야한다고 한다.
내가 아무리 List에 값을 새로 추가한다고 해도, List는 값이 불변한다고 한다. ( immutable List를 사용하고 있던 셈이였다. )
-------------------------------------------------------------------------------------------------------------------
결론
아래처럼 사용하면 된다
var fileLlist:MutableList[String] = MutableList() fileList = fileList :+ "s3n://jimin-bucket/a/*" fileList = fileList :+ "s3n://jimin-bucket/b/*" spark.read.json(fileList: _*)
'소프트웨어-이야기 > 데이터 저장소 + 시각화 ' 카테고리의 다른 글
[Spark]User Define Function (0) | 2017.03.11 |
---|---|
[Spark]DataFrame을 S3에 CSV으로 저장하기 (0) | 2017.03.11 |
[Spark] S3에 파일이 존재하는지 확인하기 (0) | 2017.02.21 |
[Spark]DataFrame을 Parquet으로 저장하기 (0) | 2016.08.28 |
[couchbase]카우치 베이스에서 테이블이란? (0) | 2016.08.21 |