metastore
둘의 차이를 이해하기 위해서는 먼저 메타스토어를 이해해야한다. spark는 RDB처럼 자신이 직접 메타데이터를 관리하지 않는다. 메타스토어의 도움을 받는다. 메타스토어는 테이블, 컬럼, 파티션 등 데이터에 대한 메타데이터를 저장하는 저장소이다. spark를 사용하면 hive 메타스토어를 많이 사용한다. 따라서 spark에서 테이블이라는 용어가 등장하면 메타스토어와 엮인다.
save
save
는 파일시스템에 영구적으로 데이터를 쓴다. 단, 메타스토어에 테이블로 쓰지 않는다. 즉, 메타스토어에 메타데이터를 갱신하지 않는다. 따라서 메타스토어가 변경사항을 파악하게 하려면 추가적인 커맨드가 필요하다. 예를 들어, DF에 컬럼을 추가해 save
를 했다면 ALTER TABLE
명령어로 컬럼을 추가해야한다.
saveAsTable
saveAsTable
도 파일시스템에 영구적으로 데이터를 쓴다. 테이블로 쓰기 때문에 메타스토어에 메타데이터가 갱신된다. 따라서별도의 커맨드가 필요하지 않다. 예를 들어, DF에 컬럼이 추가됐다면 추가된 컬럼이 테이블에 알아서 추가된다. 단, SaveMode
에 따라서 에러 발생이 가능하니 주의해야한다. 이 예시는 overwrite
를 기준으로 설명했다.
정리
save
는 메타스토어에 메타데이터를 갱신하지 않는다.saveAsTable
은 테이블로 저장되기 때문에 메타스토어에 메타데이터가 갱신된다.